[英]Group by date hour in sql
晕,我想添加id
然后group by
(不将日期时间更改为 varchar)。 数据是:
datetime product sold
2020-10-27 08:51:00 A 50
2020-10-27 08:52:00 A 10
2020-10-27 08:52:00 B 20
2020-10-27 09:52:00 B 30
我的查询是:
select newId() as id, datehour(datetime) datehour, product, sum(sold)
from table_a
group by datehour(datetime), product
但没有工作
我的预期结果:
注意:日期时间应该是日期时间类型而不是 varchar
id datehour product sold
1 2020-10-27 08:00:00 A 60
2 2020-10-27 08:00:00 B 20
3 2020-10-27 09:00:00 B 30
注意:日期时间应该是日期时间类型而不是 varchar
任何想法?
目前尚不清楚您要使用newId()
实现什么。 除此之外,您可以使用DATE_FORMAT
和STR_TO_DATE
从时间中去除分钟和秒以获取datehour
值,从而获得所需的结果; 然后你可以GROUP BY
和product
并SUM
sold
价值:
SELECT STR_TO_DATE(DATE_FORMAT(`datetime`, '%Y-%m-%d %H'), '%Y-%m-%d %H') AS datehour,
product,
SUM(sold) AS sold
FROM table_a
GROUP BY datehour, product
Output:
datehour sold product
2020-10-27 08:00:00 60 A
2020-10-27 08:00:00 20 B
2020-10-27 09:00:00 30 B
在生成id
值方面,如果您使用的是 MySQL 8+,您可以使用ROW_NUMBER()
:
SELECT ROW_NUMBER() OVER (ORDER BY datehour, product) AS id,
datehour,
product,
sold
FROM (
SELECT STR_TO_DATE(DATE_FORMAT(`datetime`, '%Y-%m-%d %H'), '%Y-%m-%d %H') AS datehour,
product,
SUM(sold) AS sold
FROM table_a
GROUP BY datehour, product
) a
ORDER BY id
对于 MySQL 5.x,您可以使用变量模拟ROW_NUMBER()
:
SELECT @rn := @rn + 1 AS id,
datehour,
product,
sold
FROM (
SELECT STR_TO_DATE(DATE_FORMAT(`datetime`, '%Y-%m-%d %H'), '%Y-%m-%d %H') AS datehour,
product,
SUM(sold) AS sold
FROM table_a
GROUP BY datehour, product
ORDER BY datehour, product
) a
CROSS JOIN (SELECT @rn := 0) i
在这两种情况下,output 是:
id datehour product sold
1 2020-10-27 08:00:00 A 60
2 2020-10-27 08:00:00 B 20
3 2020-10-27 09:00:00 B 30
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.