【问题标题】:How to sum data custom week wise in sql 2012.(mon-sun,thu-mon...)如何在 sql 2012 中对数据自定义周进行汇总。(周一-周日,周四-周一...)
【发布时间】:2013-06-21 12:16:34
【问题描述】:

我有一个有两列的表格。

pydt Decimal(13,0) and amt Decimal(18,4)

payDt 列包含 UNIX 时间戳中的日期时间,amt 包含金额。 现在我需要每周明智地进行报告。为此,我使用以下命令。

命令

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

而且它有效。 现在我需要指定周开始和周以及报告。 意味着我需要一个 sql 查询,它可以根据给定的星期开始和结束日期自动汇总数据。

例如

Mon to Sun,Tue to Mon,........... and Sun to Mon

谁能告诉我该怎么做。

编辑-2

例如

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)

我认为一切都很清楚。

【问题讨论】:

  • 您想要一个 7 天的移动窗口?
  • 可能是1天2天,以此类推。
  • 也许你可以提供一个你想要的输出的例子。
  • 请检查已编辑的问题

标签: sql grouping weekday


【解决方案1】:

如果我正确理解了您的问题,您可以在代码开头执行此操作

set datefirst 2

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

【讨论】:

  • 谢谢它的工作原理。但是如果我们想按 2 天、3 天左右的数据分组,那么我们可以做什么。
  • 如果您想将几周保持在一起,只需使用 dateparts(dw) 将其排除,然后将其添加到日期中。但你最终会得到 2-2-3 或 2-3-2,类似的东西。我相信你的问题更多是关于忽略周是一个基本单位的事实,所以你最终得到了 tues,wed;周四、周五;周六周日;周一、周二;结婚,因此;等等。在这种情况下,请让您的查询达到每个日期出现一次的程度。然后用 row_number 查询,按 row_number / 2(或 3,如果你愿意)四舍五入,取 min(date), sum(amount) 这是我会采取的方法,可能有更简单的方法
猜你喜欢
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
相关资源
最近更新 更多