Select 只有 table 的唯一 ID 行具有不同的值(按降序排列)
Select only unique ids row of table with different values in Descending order
我正在尝试获取具有相同 medicine_id 和唯一 insurance_id 以及最后插入的行的数据。将 Group by 和 Order by 放在一起,但其中的随机数据不是最后插入的。
我试过这段代码,但没有得到最后插入的数据
SELECT
`m1`.`*`
FROM
(
`pricings` `m1`
LEFT JOIN `pricings` `m2` ON
(
(
(
`m1`.`medicine_id` = `m2`.`medicine_id`
)
)
)
)
WHERE m1.medicine_id = 2
group BY m1.insurance_id DESC
ORDER BY m1.created_at;
这里是总行数。
这是完整的table
id
medicine_id
insurance_id
created_at
4311
2
1
2021-04-12 16:05:07
4766
2
1
2022-01-15 11:56:06
4767
2
38
2021-05-12 08:17:11
7177
2
38
2022-03-30 10:14:11
4313
2
39
2021-04-12 16:05:46
4768
2
39
2021-05-12 08:17:30
1356
2
40
2020-11-02 11:25:43
3764
2
40
2021-03-08 15:42:16
4769
2
40
2021-05-12 08:17:44
我也想点赞
id
medicine_id
insurance_id
created_at
4766
2
1
2022-01-15 11:56:06
4768
2
39
2021-05-12 08:17:30
4769
2
40
2021-05-12 08:17:44
7177
2
38
2022-03-30 10:14:11
也将其添加为答案。我还没有测试它,只是修复格式以适用于您正在使用的任何版本的数据库,并让我知道结果。
SELECT m1.id , m1.Insurance_id , m1.medicine_id , max(m1,created_at)
FROM (
`pricings` `m1` LEFT JOIN `pricings` `m2` ON `m1`.`medicine_id` = `m2`.`medicine_id`
)
WHERE m1.medicine_id = 2 and m1.insurance_id in (1,39,40,38)
GROUP BY m1.insurance_id DESC
ORDER BY m1.created_at;
编辑。我也去掉了6个额外的括号,我看不出它们有什么用
MySQL 5.x:使用 sub-query 找到每个组的最大 created_at 值,然后将其加入源 table 以识别它来自的行。
SELECT
p.`*`
FROM
`pricings` p
INNER JOIN
(
SELECT
`medicine_id`,
`insurance_id`,
MAX(created_at) AS `created_at`
FROM
`pricings`
GROUP BY
`medicine_id`,
`insurance_id`
)
p_max
ON p.`medicine_id` = p_max.`medicine_id`
AND p.`insurance_id` = p_max.`insurance_id`
AND p.`created_at` = p_max.`created_at`
WHERE
p.`medicine_id` = 2
ORDER BY
p.`created_at`;
MySQL8:用ROW_NUMBER()
枚举每组,然后从每组中选取第一行。
SELECT
p.`*`
FROM
`pricings` p
FROM
(
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY `medicine_id`,
`insurance_id`
ORDER BY `created_at` DESC
)
AS `row_id`
FROM
`pricings`
)
p
WHERE
p.`medicine_id` = 2
AND p.`row_id` = 1
ORDER BY
p.`created_at`;
我正在尝试获取具有相同 medicine_id 和唯一 insurance_id 以及最后插入的行的数据。将 Group by 和 Order by 放在一起,但其中的随机数据不是最后插入的。 我试过这段代码,但没有得到最后插入的数据
SELECT
`m1`.`*`
FROM
(
`pricings` `m1`
LEFT JOIN `pricings` `m2` ON
(
(
(
`m1`.`medicine_id` = `m2`.`medicine_id`
)
)
)
)
WHERE m1.medicine_id = 2
group BY m1.insurance_id DESC
ORDER BY m1.created_at;
这里是总行数。 这是完整的table
id | medicine_id | insurance_id | created_at |
---|---|---|---|
4311 | 2 | 1 | 2021-04-12 16:05:07 |
4766 | 2 | 1 | 2022-01-15 11:56:06 |
4767 | 2 | 38 | 2021-05-12 08:17:11 |
7177 | 2 | 38 | 2022-03-30 10:14:11 |
4313 | 2 | 39 | 2021-04-12 16:05:46 |
4768 | 2 | 39 | 2021-05-12 08:17:30 |
1356 | 2 | 40 | 2020-11-02 11:25:43 |
3764 | 2 | 40 | 2021-03-08 15:42:16 |
4769 | 2 | 40 | 2021-05-12 08:17:44 |
我也想点赞
id | medicine_id | insurance_id | created_at |
---|---|---|---|
4766 | 2 | 1 | 2022-01-15 11:56:06 |
4768 | 2 | 39 | 2021-05-12 08:17:30 |
4769 | 2 | 40 | 2021-05-12 08:17:44 |
7177 | 2 | 38 | 2022-03-30 10:14:11 |
也将其添加为答案。我还没有测试它,只是修复格式以适用于您正在使用的任何版本的数据库,并让我知道结果。
SELECT m1.id , m1.Insurance_id , m1.medicine_id , max(m1,created_at)
FROM (
`pricings` `m1` LEFT JOIN `pricings` `m2` ON `m1`.`medicine_id` = `m2`.`medicine_id`
)
WHERE m1.medicine_id = 2 and m1.insurance_id in (1,39,40,38)
GROUP BY m1.insurance_id DESC
ORDER BY m1.created_at;
编辑。我也去掉了6个额外的括号,我看不出它们有什么用
MySQL 5.x:使用 sub-query 找到每个组的最大 created_at 值,然后将其加入源 table 以识别它来自的行。
SELECT
p.`*`
FROM
`pricings` p
INNER JOIN
(
SELECT
`medicine_id`,
`insurance_id`,
MAX(created_at) AS `created_at`
FROM
`pricings`
GROUP BY
`medicine_id`,
`insurance_id`
)
p_max
ON p.`medicine_id` = p_max.`medicine_id`
AND p.`insurance_id` = p_max.`insurance_id`
AND p.`created_at` = p_max.`created_at`
WHERE
p.`medicine_id` = 2
ORDER BY
p.`created_at`;
MySQL8:用ROW_NUMBER()
枚举每组,然后从每组中选取第一行。
SELECT
p.`*`
FROM
`pricings` p
FROM
(
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY `medicine_id`,
`insurance_id`
ORDER BY `created_at` DESC
)
AS `row_id`
FROM
`pricings`
)
p
WHERE
p.`medicine_id` = 2
AND p.`row_id` = 1
ORDER BY
p.`created_at`;