-1

我有桌子:

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
4

3 回答 3

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 点时间。

于 2013-01-18T16:12:59.080 回答
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

如果这不是您想要的,请在您的示例表中更具体,以便我们为您提供帮助。

于 2013-01-18T16:40:36.037 回答
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])))

希望它对你也有帮助。

于 2013-01-18T17:33:31.143 回答