【发布时间】:2014-04-30 15:05:24
【问题描述】:
我将在我的表中输入带有如下数据的日期:
Date Value
4-20-2014 45
4-21-2014 15
4-22-2014 35
...
4-30-2014 109
我将在每个星期日执行我的存储过程,这意味着我想从上一个星期日到昨天(星期六)获取带有 Date 的行。
我有以下查询,它将从上周日到上周六得到,我认为这是错误的,所以我将其修改如下:
INSERT INTO [database].[dbo].[table]
SELECT (WEEKENDING DATE) AS [Date], SUM([ORDERS]) AS Orders, SUM([B ORDERS]) AS bOrders, SUM([RESULT]) AS Results
FROM [database].[dbo].[origtable]
WHERE
[Date] >= "PREVIOUS SUNDAY DATE"
AND
[Date] <= "SATURDAY DATE (YESTERDAY)"
我想获得以下方面的帮助:
[Date] >= "PREVIOUS SUNDAY DATE"
AND
[Date] <= "SATURDAY DATE (YESTERDAY)"
因此,如果我在 5/4/2014 上运行 SP,它将在周日 (4/27/2014) 到周六 (5/3/2014) 之间抓取
这行得通吗:
INSERT INTO [Database].[dbo].[table]
SELECT
CONVERT(VARCHAR(10), GETDATE(), 101) AS [Date],
SUM([EMR ORDERS]) AS LastWeekEMROrders,
SUM([ACCESSIONED LAB ORDERS]) AS LastWeekAccLabOrders,
SUM([LAB_RESULT]) AS LastWeekLabResults
FROM [database].[dbo].[origtable]
WHERE
[Date] >= DATEADD(day, -((DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7) - 6,
DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)) --PREVIOUS SUNDAY
AND
[Date] <= DATEADD(day, -(DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7,
DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)) --PREVIOUS SATURDAY
如果我有以下查询并在 2014 年 5 月 4 日执行:
set @startdate = DATEADD(wk, DATEDIFF(wk, 0, getdate()), -2) --for sunday
set @enddate = DATEADD(wk, -1, DATEADD(wk, DATEDIFF(wk, 0,getdate()), -1))-- for saturday
星期天和星期六是几号?
【问题讨论】:
-
你为什么不直接使用case语句?
-
是的,过去 7 天。我在问题的底部添加了到目前为止的内容,请让我知道它是否有效。
-
您是否尝试过执行选择(没有插入)以查看发生了什么
-
目前显示的是上周日的日期,即 4/27/ 但我会等到周一才能看到是哪个日期。
-
您的 [Date] 列是否只有日期信息?没有日期时间?
标签: sql sql-server ssms