[英]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.