我的数据库里有下面的表格。
表格
ID Value Date
F-1 100 2019-08-15 14:12:24
F-1 50 2019-08-10 18:15:19
F-1 50 2019-08-08 19:10:09
F-2 50 2019-07-07 23:12:24
F-2 100 2019-07-07 17:09:18
F-3 100 2019-09-19 13:45:55
F-3 100 2019-09-10 13:00:01
F-4 50 2019-10-01 14:19:04
从上面提到的表中,我想检索根据特定ID
组的最旧日期时间和该特定ID
的最新日期时间的第一个值是什么。
所需输出:
ID First Last Count
F-1 50 100 3
F-2 100 100 2
F-3 100 100 2
F-4 50 Null 1
我尝试过使用case when,但它不起作用。
发布于 2019-11-08 12:49:22
使用ROW_NUMBER
(MySQL 8+):
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date) rn_min,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date DESC) rn_max
FROM yourTable
)
SELECT
ID,
MAX(CASE WHEN rn_min = 1 THEN Value END) AS First,
CASE WHEN COUNT(*) > 1 THEN MAX(CASE WHEN rn_max = 1 THEN Value END) END AS Last,
COUNT(*) AS Count
FROM cte
GROUP BY
ID
ORDER BY
ID;
以下是针对MySQL 5.7的版本:
SELECT
ID,
MAX(CASE WHEN t1.Date = t2.min_date THEN Value END) AS First,
CASE WHEN COUNT(*) > 1
THEN MAX(CASE WHEN t1.Date = t2.max_date THEN Value END) END AS Last,
COUNT(*) AS Count
FROM yourTable t1
LEFT JOIN
(
SELECT ID, MIN(Date) AS min_date, MAX(Date) AS max_date
FROM yourTable
GROUP BY ID
) t2
ON t1.ID = t2.ID
GROUP BY
t1.ID
ORDER BY
t1.ID;
https://stackoverflow.com/questions/58760479
复制相似问题