繁体   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