Reputation: 5349
I'd like to find last weeks dates
SELECT *
FROM Table
Where [Date] Between '04-Jan-2016' AND '15-Jan-2016'
Every time I run my SQL Query it needs to display last week
.
Upvotes: 13
Views: 35937
Reputation: 1
SELECT DATEADD(wk, -1, DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) ,'Last_Sunday'
union all
SELECT DATEADD(wk, -1, DATEADD(DAY, 2-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) ,'Last_Monday'
union all
SELECT DATEADD(wk, -1, DATEADD(DAY, 3-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) ,'Last_Tuesday'
union all
SELECT DATEADD(wk, -1, DATEADD(DAY, 4-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) ,'Last_Wednesday'
union all
SELECT DATEADD(wk, -1, DATEADD(DAY, 5-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) ,'Last_Thursday'
union all
SELECT DATEADD(wk, -1, DATEADD(DAY, 6-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) ,'Last_Friday'
union all
SELECT DATEADD(wk, -1, DATEADD(DAY, 7-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) ,'Last_Saturday'
Upvotes: 0
Reputation: 1522
I needed the range from the previous Monday at 00:00:00 to the previous Sunday at 23:59:59. This is how you can get that:
SET @THIS_MONDAY = SUBDATE(DATE(NOW()), WEEKDAY(NOW()));
SELECT CONCAT(SUBDATE(@THIS_MONDAY, 7), ' 00:00:00') AS last_week_monday,
CONCAT(SUBDATE(@THIS_MONDAY, 1), ' 23:59:59') AS last_week_sunday;
The same without setting a variable:
WITH this_week AS (SELECT SUBDATE(DATE(NOW()), WEEKDAY(NOW())) as monday)
SELECT CONCAT(SUBDATE(monday, 7), ' 00:00:00') AS last_week_monday,
CONCAT(SUBDATE(monday, 1), ' 23:59:59') AS last_week_sunday
FROM this_week;
Upvotes: 1
Reputation: 1484
SELECT *
FROM Table
Where [Date] Between DATEADD(wk,DATEDIFF(wk,7,GETDATE()),0)
AND DATEADD(wk,DATEDIFF(wk,7,GETDATE()),4)
Upvotes: 4
Reputation: 8253
Hopefully following is what you want,
--START OF LAST WEEK
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)
--END OF LAST WEEK
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 4)
DECLARE @input varchar(10)
--SET @input = '01/10/2016'
SET @input = GETDATE()
--START OF LAST WEEK
SELECT DATEADD(wk, DATEDIFF(wk, 6,
CASE DATEPART(dw,@input)
WHEN 1 THEN DATEADD(d,-1,@input)
ELSE @input
END
), 0)
--END OF LAST WEEK
SELECT DATEADD(wk, DATEDIFF(wk, 6,
CASE DATEPART(dw,@input)
WHEN 1 THEN DATEADD(d,-1,@input)
ELSE @input
END
), 4)
Upvotes: 6
Reputation: 5349
---To get the first day of the previous week in SQL Server, use the following code:
SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),0)
--To get the last day of the previous week:
SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),4)
Upvotes: 7