簡體   English   中英

按 sql 中的日期小時分組

[英]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_FORMATSTR_TO_DATE從時間中去除分鍾和秒以獲取datehour值,從而獲得所需的結果; 然后你可以GROUP BYproductSUM 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

db-fiddle 上的演示

在生成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

db-fiddle 上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM