【发布时间】:2018-01-22 20:27:19
【问题描述】:
感谢您查看我的问题。 我需要帮助编写根据日期按内容分组的查询,但是某些内容可能来自上一个日期,因为日期是通过截止时间确定的。
以下是我的问题的一个例子
if object_id('tempdb..#tdata') is not null drop table #tdata;
go
create table #tdata(
machine_id varchar(12),
temestamp datetime,
commit_count int,
amount decimal(6,2)
);
insert into #tdata select 'Machine1','2018-01-02 13:03:18.000',1,3.95;
insert into #tdata select 'Machine1','2018-01-02 02:11:19.000',1,3.95;
insert into #tdata select 'Machine1','2018-01-01 23:18:16.000',1,3.95;
*insert into #tdata select 'Machine1','2018-01-01 22:45:20.000',1,3.95;*--from here and above should be in next date
insert into #tdata select 'Machine1','2018-01-01 10:13:06.000',1,3.95;
insert into #tdata select 'Machine1','2018-01-01 01:13:59.000',1,3.95;
insert into #tdata select 'Machine1','2018-01-01 00:26:51.000',1,3.95;
insert into #tdata select 'Machine1','2018-01-01 00:17:01.000',1,3.95;
insert into #tdata select 'Machine1','2018-01-01 00:13:11.000',1,3.95;
insert into #tdata select 'Machine1','2018-01-01 00:06:15.000',1,3.95;
insert into #tdata select 'Machine1','2017-12-31 22:59:59.000',1,3.95;
insert into #tdata select 'Machine1','2017-12-31 21:27:25.000',1,3.95;
insert into #tdata select 'Machine1','2017-12-31 20:32:22.000',1,3.95;
select machine_id,
cast(temestamp as date),
sum(commit_count),
sum(amount)
from #tdata
group by machine_id, cast(temestamp as date);
上面给了我以下输出
machine_id (No column name) (No column name) (No column name)
Machine1 2017-12-31 3 11.85
Machine1 2018-01-01 8 31.60
Machine1 2018-01-02 2 7.90
您可以在其中看到 2018-01-01 的总数,包括 2018-01-02 日期的 2 commit_count,因为它们发生在前一个日期但在截止时间之后。总数应该是 3,6 和 4...
编辑:有时会有数据跨越前几天的截止时间,而其他时候不会有任何这样的数据。截止时间是 2200 小时或晚上 10 点
有人可以帮助编写此查询吗?
【问题讨论】:
-
什么是截止时间?
-
对不起,我确实是在下一个小时写的,但我想不清楚 insert into #tdata select 'Machine1','2018-01-01 22:45:20.000', 1,3.95;--从这里到上面应该在下一个日期截止时间是22小时或晚上10点
标签: sql .net sql-server