如何在sql 2012中按自定义周对数据求和。(周一至周日,周四至周一…)

如何在sql 2012中按自定义周对数据求和。(周一至周日,周四至周一…),sql,grouping,weekday,Sql,Grouping,Weekday,我有一个有两列的表 payDt列包含UNIX时间戳中的日期时间,amt包含金额。 现在我需要每周做一份报告。为此,我使用下面的命令 命令 它是有效的。 现在我需要为报告指定周开始、周和。 意味着我需要一个sql查询,根据给定的周开始和周结束日期自动求和数据 前任。 谁能告诉我怎么做 编辑-2 前任。 结果 这里的结果显示了从周日到周六的分组数据。 现在我需要每天的分组数据 就像结果显示数据一样。 我需要数据 我认为每件事都很清楚。如果我正确理解了您的问题,您可以在代码的开头这样做 set dat

我有一个有两列的表

payDt列包含UNIX时间戳中的日期时间,amt包含金额。 现在我需要每周做一份报告。为此,我使用下面的命令

命令 它是有效的。 现在我需要为报告指定周开始、周和。 意味着我需要一个sql查询,根据给定的周开始和周结束日期自动求和数据

前任。 谁能告诉我怎么做

编辑-2 前任。 结果 这里的结果显示了从周日到周六的分组数据。 现在我需要每天的分组数据

就像结果显示数据一样。 我需要数据
我认为每件事都很清楚。

如果我正确理解了您的问题,您可以在代码的开头这样做

set datefirst 2

这将使星期二成为你一周的第一天。这也将使星期一成为您一周的最后一天。

您想要一个7天的移动窗口吗?可能是1天2天,以此类推。也许您可以提供一个所需输出的示例。请检查编辑的问题,谢谢它的工作。但是如果我们想要按2天的数据分组,在这种情况下,我们可以做3天左右。如果你想把这几周保持在一起,就用dateparts(dw)把它加上日期。但你最终会得到2-2-3或2-3-2之类的结果。我相信你的问题更多的是忽略了一个事实,即周是一个基本单位,所以你以周二、周三结束;星期四、五;星期六,太阳;星期一、二;因此,我们结婚了;等等在这种情况下,将查询设置为每个日期显示一次的点。然后用行数查询,按行数分组/2(或3,如果你愿意),取最小值(日期),总和(金额)。这是我会采取的方法,可能有更简单的方法
Select X.PMonth,X.PWeek,SUM(X.Payment) as Payment from
(
    select 
      MONTH(dateadd(s,CAST(LEFT(pydt, LEN(pydt) - 3) AS DECIMAL(10,0)),'01/01/1970')) as PMonth,
      DATEPART(WK,dateadd(s,CAST(LEFT(pydt, LEN(pydt) - 3) AS DECIMAL(10,0)),'01/01/1970')) as PWeek,
      amt as Payment
    from tblpayment
)X
group by 
X.PMonth,X.PWeek
order by X.PMonth,X.PWeek
Mon to Sun,Tue to Mon,........... and Sun to Mon
DECLARE @TESTTABLE TABLE(pydt DECIMAL(13,0),amt DECIMAL(18,4))
INSERT INTO @TESTTABLE
SELECT 1371633942104,   500.000 UNION ALL
SELECT 1371536351014,   200.000 UNION ALL
SELECT 1371508936993,   800.000 UNION ALL
SELECT 1371421684905,   800.000 UNION ALL
SELECT 1371279960886,   500.000 UNION ALL
SELECT 1371250768515,   900.000 UNION ALL
SELECT 1371115833490,   200.000 UNION ALL
SELECT 1371052445207,   100.000 UNION ALL
SELECT 1370935778269,   100.000 UNION ALL
SELECT 1370874220086,   200.000 UNION ALL
SELECT 1370790602634,   100.000 UNION ALL
SELECT 1370679256936,   300.000 UNION ALL 
SELECT 1370644477888,   100.000 UNION ALL
SELECT 1370524059728,   500.000 UNION ALL
SELECT 1370419275541,   100.000 UNION ALL
SELECT 1370383832831,   900.000 UNION ALL
SELECT 1370299308283,   100.000 UNION ALL
SELECT 1370211913979,   200.000 UNION ALL
SELECT 1370066810107,   100.000 UNION ALL
SELECT 1370039853256,   200.000 UNION ALL
SELECT 1369888990306,   200.000 UNION ALL
SELECT 1369864999229,   1000.000 UNION ALL
SELECT 1369863700412,   200.000 UNION ALL
SELECT 1369863257127,   300.000 UNION ALL
SELECT 1369863225725,   200.000 UNION ALL
SELECT 1369860049462,   100.000 UNION ALL
SELECT 1369859952006,   -47.640 UNION ALL
SELECT 1369858718486,   100.000 UNION ALL
SELECT 1369835887771,   100.000 UNION ALL
SELECT 1369815058443,   100.000 UNION ALL
SELECT 1369781776403,   900.000 
Select min(X.pydt) as [Start From],max(X.pydt) as [End To],MAX(X.PMonth) AS PMonth,X.PWeek,SUM(X.Payment) as Payment from
(
  select 
  dateadd(s,CAST(LEFT(pydt, LEN(pydt) - 3) AS DECIMAL(10,0)),'01/01/1970') as pydt,
  MONTH(dateadd(s,CAST(LEFT(pydt, LEN(pydt) - 3) AS DECIMAL(10,0)),'01/01/1970')) as PMonth,
  DATEPART(WK,dateadd(s,CAST(LEFT(pydt, LEN(pydt) - 3) AS DECIMAL(10,0)),'01/01/1970')) as PWeek,
  amt as Payment
  from @TESTTABLE
)X
group by 
X.PWeek
order by PMonth,X.PWeek
Start From          End To               PMonth PWeek   Payment
2013-05-28 22:56:16 2013-06-01 06:06:50     6   22     3452.3600
2013-06-02 22:25:13 2013-06-08 08:14:16     6   23     2200.0000
2013-06-09 15:10:02 2013-06-15 07:06:00     6   24     2100.0000
2013-06-16 22:28:04 2013-06-19 09:25:42     6   25     2300.0000
From 2013-06-02 22:25:13(Sunday) To 2013-06-08 08:14:16(Saturday)
From 2013-06-04 22:25:13(Tuesday) To 2013-06-08 08:14:16(Monday)
set datefirst 2