Phạm Minh Tân
Phạm Minh Tân

Reputation: 77

Select 7 days ago in 7 week

@status [nvarchar](max),
@fromDate [datetime],
@toDate [datetime],
@companyId [int]
select  
ISNULL(SUM(rec.SubTotal), 0) AS SubTotal,
sto.Id AS StoreId,
    CAST(rec.CreatedDate AS DATE) as CreatedDate,
    sto.Name AS StoreName from Receipts rec
                        left join(
                            select  ReceiptId, SUM(Quantity) as Quantity from ReceiptDetails
                            group by ReceiptId
                        ) red on rec.Id = red.ReceiptId
                        left outer join(
                            select Id,Name from Stores
                            group by Id,Name
                        ) sto on rec.StoreId = sto.Id
                         where rec.CompanyId = @companyId
                            and rec.Status = @status
                            and rec.CreatedDate <= @todate
                            and rec.CreatedDate >=  @fromDate
group by sto.Id, sto.Name,CAST(rec.CreatedDate AS DATE)

This is my current query SQL ,at the present i select data in everydays in a rangeDate by @todate and @fromdate

Now i want to select data by CreatedDate by dates of the last 7 weeks, Example when @fromdate is Today : 2018-12-1 the data expected will be

2018-10-20
2018-10-27
2018-11-3
2018-11-10
2018-12-17
2018-11-24
2018-12-1

My data at the present

...
...
2018-11-29
2018-11-30
2018-12-1

I mean the date in 6 week ago

Upvotes: 0

Views: 71

Answers (1)

interesting-name-here
interesting-name-here

Reputation: 1890

You could create this as a function and pass in the number of weeks but that's up to you.

See below:

declare @i as int
set @i = 7
select  
    ISNULL(SUM(rec.SubTotal), 0) AS SubTotal,
    sto.Id AS StoreId,
    case 
        when CAST(rec.CreatedDate as Date) between CAST(rec.CreatedDate AS DATE) -(7 * (@i)) and CAST(rec.CreatedDate AS DATE) -((7*(@i - 1)) + 1)
            then 
                Cast(CAST(rec.CreatedDate -(7*(@i)) AS DATE))
        when CAST(rec.CreatedDate as Date) between CAST(rec.CreatedDate AS DATE) -(7 * (@i-1)) and CAST(rec.CreatedDate AS DATE) -((7*(@i-2)) + 1)
            then 
                Cast(CAST(rec.CreatedDate AS DATE) -(7*(@i-1)) AS DATE)
        when CAST(rec.CreatedDate as Date) between CAST(rec.CreatedDate AS DATE) -(7 * (@i - 2)) and CAST(rec.CreatedDate AS DATE) -((7*(@i-3)) + 1)
            then 
                Cast(CAST(rec.CreatedDate AS DATE) -(7*(@i-2)) AS DATE)
        when CAST(rec.CreatedDate as Date) between CAST(rec.CreatedDate AS DATE) -(7 * (@i - 3)) and CAST(rec.CreatedDate AS DATE) -((7*(@i-4)) + 1)
            then 
                Cast(CAST(rec.CreatedDate AS DATE) -(7*(@i-3)) AS DATE)
        when CAST(rec.CreatedDate as Date) between CAST(rec.CreatedDate AS DATE) -(7 * (@i - 4)) and CAST(rec.CreatedDate AS DATE) -((7*(@i-5)) + 1)
            then 
                Cast(CAST(rec.CreatedDate AS DATE) -(7*(@i-4)) AS DATE)
        when CAST(rec.CreatedDate as Date) between CAST(rec.CreatedDate AS DATE) -(7 * (@i - 5)) and CAST(rec.CreatedDate AS DATE) -((7*(@i-6)) + 1)
            then 
                Cast(CAST(rec.CreatedDate AS DATE) -(7*(@i-5)) AS DATE)
        when CAST(rec.CreatedDate as Date) between CAST(rec.CreatedDate AS DATE) -(7 * (@i - 6)) and CAST(rec.CreatedDate AS DATE) -((7*(@i-7)) + 1)
            then 
                Cast(CAST(rec.CreatedDate AS DATE) -(7*(@i-6)) AS DATE)
        else ''
    end as CreatedDate,
    sto.Name AS StoreName 
from Receipts rec
                    left join(
                        select  ReceiptId, SUM(Quantity) as Quantity from ReceiptDetails
                        group by ReceiptId
                    ) red on rec.Id = red.ReceiptId
                    left outer join(
                        select Id,Name from Stores
                        group by Id,Name
                    ) sto on rec.StoreId = sto.Id
                     where rec.CompanyId = @companyId
                        and rec.Status = @status
                        and rec.CreatedDate <= @todate
                        and rec.CreatedDate >=  @fromDate
group by sto.Id, sto.Name,CAST(rec.CreatedDate AS DATE)

Upvotes: 1

Related Questions