簡體   English   中英

在7周內選擇7天前

[英]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)

這是我當前的查詢SQL,目前我每天都在@Date和@fromdate的rangeDate中選擇數據

現在我想按過去7周的日期按CreatedDate選擇數據,例如@fromdate為Today:2018-12-1時的預期數據為

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

我目前的數據

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

我的意思是6周前的日期

您可以將其創建為函數並傳入星期數,但這取決於您。

見下文:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM