1

I want to select last seven day's dates in the select statement as current date is 2018-07-12

Expected result :

Last_Seven_Days_Dates
2018-07-06
2018-07-07
2018-07-08
2018-07-09
2018-07-10
2018-07-11
2018-07-12

Jacob H
  • 2,455
  • 1
  • 12
  • 29
Prashant Pimpale
  • 10,349
  • 9
  • 44
  • 84
  • 1
    Possible duplicate of: https://stackoverflow.com/questions/27599557/how-to-get-last-7-days-data-from-current-datetime-to-last-7-days-in-sql-server – gcourtet Jul 12 '18 at 13:08
  • 1
    Possible duplicate of [How to get last 7 days data from current datetime to last 7 days in sql server](https://stackoverflow.com/questions/27599557/how-to-get-last-7-days-data-from-current-datetime-to-last-7-days-in-sql-server) – dllhell Jul 12 '18 at 13:09
  • I don't want to use that in any where condition just want a result as described in question and store it in temp table – Prashant Pimpale Jul 12 '18 at 13:10

5 Answers5

5

If your expected results listed in the question are exactly what you are looking for, this will do the trick:

SELECT * FROM (
    SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
) AS the_table

results:

Last_Seven_Days_Dates
---------------------
2018-07-05
2018-07-06
2018-07-07
2018-07-08
2018-07-09
2018-07-10
2018-07-11
2018-07-12

Since you stated you'll want these in a temp table, I've updated the answer to make it a subquery, a little easier to join or do something with.

Additionally if you need it in a temporary table you could do this:

SELECT * INTO #TempTableName FROM (
    SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
)
sniperd
  • 5,124
  • 6
  • 28
  • 44
5

I use the following to generate date series

DECLARE @MinDate DATE = DATEADD(DAY, -7, GETDATE()),
        @MaxDate DATE = GETDATE();

SELECT  TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM    sys.all_objects a;

You can wrap it in a function and pass in MinDate and MaxDate if you ever need to make it reusable

Tom Halson
  • 380
  • 3
  • 12
3

I would use a recursive CTE:

with dates as (
      select cast(getdate() as date) as dte, 1 as cnt
      union all
      select dateadd(day, 1, dte), cnt + 1
      from dates
      where cnt < 7
     )
select dte
from dates;
Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786
1

you can use

DATEADD(DAY, -7, getDate()) < [date_field]

on your query

Mohaalak
  • 162
  • 1
  • 5
1
select * from your_table
where  date_field>=dateadd(day,-7,cast(getdate() as date)) and date_field<cast(getdate() as date)
Zaynul Abadin Tuhin
  • 31,407
  • 5
  • 33
  • 63