【问题标题】:How to get the last week date from Sunday to Saturday如何获取从周日到周六的最后一周日期
【发布时间】:2021-05-18 15:22:37
【问题描述】:

我有下表:

Date          Value
4/13/2014     25
4/14/2014     35
4/15/2014     30
4/16/2014     25
4/17/2014     21
4/18/2014     20
4/19/2014     42
4/20/2014     54
4/21/2014     44
4/22/2014     47
4/23/2014     48
4/24/2014     34
4/25/2014     32
4/26/2014     18
4/27/2014     20
4/28/2014     32
4/29/2014     34

每日更新。

我怎样才能有一个 SQL 查询来添加上周(周日至周六)的总数 Value

在这种情况下,星期日是 4/20,星期六是 4/26。

我目前有以下查询,从本周开始:

SELECT * , DATENAME(WEEKDAY, Date) AS [DAY], CAST(CONVERT(VARCHAR(12), DATEADD(DAY , 7-DATEPART(WEEKDAY,GETDATE()),GETDATE()), 110) AS DATE) AS 'WeekEnding'
FROM [database].[dbo].[table]
WHERE Date >= cast(dateadd(day,1-datepart(dw, getdate()), getdate()) as date)
--SUNDAY to SATURDAY

【问题讨论】:

  • 尝试过这个吗?
  • 我的问题中确实有一个查询,我刚刚更新了这周的日期。

标签: sql date


【解决方案1】:

如果我正确理解您的问题,您希望在上周日至周六的时间跨度内获得Value 字段的SUM。由于您说该表每天更新,我假设您指的是最后一个实际周,而不仅仅是恰好在数据库中的最后一周。

这是一个查询,它通过在周日到周六之间进行过滤来汇总记录。在您的示例数据中,总数为277

SELECT SUM(Value) AS TotalValue
FROM ValueTable
WHERE Date >= DATEADD(day, -((DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7) - 6,
              DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) AND
      Date <= DATEADD(day, -(DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7,
              DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0))

解释:DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 部分只是删除了当前日期时间的时间部分。另一部分,DATEADD(day, -(DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7) 减去当前日期的 weekday 和星期六之间的差,得出上星期六的日期。

【讨论】:

  • 是的,表格会继续添加数据,但每当我查看表格时,我只想要上周的数据,而不是继续添加。
  • 例如,如果今天是 29 日星期二,那么查询应该使用的星期日日期是 4/20 而不是 4/27。这是它在做什么?
  • @SiKni8:确实,因为它所做的只是在两种情况下都首先选择最后一个星期六(4/26),然后在星期日(4/20)减去 6 天。
【解决方案2】:

对于 Oracle,您可以尝试。 IW - 一年中的周数,根据 ISO 标准:

SELECT to_char( Date , 'IW' ), SUM (Value)
FROM TableA
GROUP BY to_char( Date , 'IW' );

【讨论】:

  • 这与我的日期有关吗?我正在开始使用 SQL,所以我不太确定...
  • 如果你提供你想要的结果会更好。
  • 这项工作可以吗:SELECT * , DATENAME(WEEKDAY, Date) AS [DAY], CAST(CONVERT(VARCHAR(12), DATEADD(DAY , 7-DATEPART(WEEKDAY,GETDATE()),GETDATE()), 110) AS DATE) AS 'WeekEnding' FROM [database].[dbo].[table] WHERE Date &gt;= DATEADD(wk, DATEDIFF(wk, 0, getdate()), -2) AND Date &lt;= DATEADD(wk, -1, DATEADD(wk, DATEDIFF(wk, 0,getdate()), -1)) --LAST SUNDAY to LAST SATURDAY
【解决方案3】:

获取上周六至周日数据的更简单方法是:

select * from my_table_name where my_date between 
DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE()) AND DATEADD(dd, DATEPART(DW,GETDATE())*-1+7, GETDATE())

DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE()) 是上周六和 DATEPART(DW,GETDATE())*-1+7, GETDATE()) 是即将到来的星期日。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多