我有桌子:
select Name, TimeStamp from Goods
我想按照日期从晚上9点到晚上9点对商品进行分组 所以结果应该是这样的:
Closes, Count, 2013-01-18 9PM
Bikes, Count, 2013-01-18 9PM
怎么做?
我希望在24小时内收到数据,但每个时段从晚上9点开始,到第二天晚上9点结束,但不仅仅是1天,我的意思是结果可能是这样的:2013-01-17 9PM 3记录,2013-01-18 9PM 5记录。这意味着从1月17日晚上9点到晚上9点,我们卖出了3件商品。如果信息应该更加详细,请告诉我。
另一种描述:
结果应该是这样的:
Jamper1, 2013-01-17 21:00, 1
Jamper2, 2013-01-17 21:00, 1
Jamper1, 2013-01-18 21:00, 2
Jamper2, 2013-01-18 21:00, 2
答案 0 :(得分:0)
这很接近,假设时间戳存储为datetime
。
select name, count(*), min(timestamp)
from goods
group by cast((timestamp + 3.0/24) as date)
它为时间戳添加了三个小时以进行分组。第三列是数据中的最小时间戳。
如果您想要更多格式的内容。 。
select name, count(*), cast(cast(timestamp + 3.0/24 as date) as datetime) + 21.0/24
这将在晚上9点给你一个问题。
答案 1 :(得分:0)
假设您想在12小时内显示“名称”的总数。虽然如果你已经知道你的时间段是上午9点到晚上9点,你为什么要显示时间?
select name, sum(name) as total, date_format(timestamp, '%Y-%m-%d %l%p') as time
from goods where hour(timestamp) between 9 and 21
group by name
如果这不是您想要的,请在示例表中更具体,以便我们为您提供帮助。
答案 2 :(得分:0)
最终我发现了如何做到这一点:
select Name, count(*), DATEADD(DD, 0, DATEDIFF(DD, 0, dateadd(hour, 3, [TimeStamp])))
from Goods
group by Name, DATEADD(DD, 0, DATEDIFF(DD, 0, dateadd(hour, 3, [TimeStamp])))
希望它对你也有帮助。