Server Management Studio 中的查询 + table in ssrs reports-using select with correlated subquery

query in Server Management Studio + table in ssrs reports+-using select with correlated sub-query

我有一个table,包括水果组和大小 即:

                          send         send
**fruit-package  /  size  /  start-date/   end-date/ **  
-------------------------------------------------- 
apple          s           2.2.16            5.2.16
apple          s           7.2.16          **10.2.16**
apple          s          **20.2.16**         21.2.16
--------------------------------------------------
apple          l             1.2.16       **5.2.16**
apple          l            **25.2.16**     26.2.16
apple          l            26.2.16        27.2.16
-------------------------------------------------
orange         m               1.1.16       2.1.16     
orange         m               3.1.16       **4.1.16**
orange         m              **24.1.16**    25.1.16
---------------------------------------------------   

我需要,对于每组特定的水果包装和尺寸 (如 apple+small),找到组中的 max 天,经过 一个包 send-end-date 给后面的包,在组里,send-start-day 然后 select 发送结束日期并遵循开始日期并计算 这两个值之间的最大差异,并将它们放入该特定组的结果 table 中,对每个组执行此操作

所以结果table会是

                             send         send
**fruit-package /   size  /  start-date /  end-date/ **  
-------------------------------------------------- 
apple               s      20.2.16     10.2.16                      
--------------------------------------------------                            

apple               l      25.2.16     5.2.16
-------------------------------------------------
orange              m      24.1.16     4.1.16

---------------------------------------------------  

我试着分几部分来做。 第一部分: 对于每组水果 - 找到所有组合:

(fruit-package) + (size) + (current end_date) 和follow package的start_date 像那样:

select P.fruit
,P.size
,P.end_date

,(SELECT top 1 (pa.start_date)
  FROM packages as pa 
  WHERE pa.start_date >= pa.end_date   
  and p.fruit=pa.fruit and p.size=pa.size
    order by pa.start_date desc  ) as start    


  into #temp

from packages p 


group by p.fruit
, P.size
,p.end_date

第二步是,简单地找到每组中具有最大日差的行

但我写的第一部分不起作用 - 开始日期为空值, 或一个 end_date 而不是来自 select 内部的每个组 - 为什么和 如何纠正?

请帮忙

谢谢

如果您使用的是 2012 或更高版本,这应该适合您。

Create Table #Tbl (Name Varchar(8000), Size Char(1), StartDate Date, EndDate Date)
Insert #Tbl Values ('apple', 's', '2.2.16', '2.5.16')
Insert #Tbl Values ('apple', 's', '2.7.16', '2.10.16')
Insert #Tbl Values ('apple', 's', '2.20.16', '2.21.16')
Insert #Tbl Values ('apple', 'l', '2.1.16', '2.5.16')
Insert #Tbl Values ('apple', 'l', '2.25.16', '2.26.16')
Insert #Tbl Values ('apple', 'l', '2.26.16', '2.27.16')
Insert #Tbl Values ('orange', 'm', '1.1.16', '1.2.16') 
Insert #Tbl Values ('orange', 'm', '1.3.16', '1.4.16')
Insert #Tbl Values ('orange', 'm', '1.24.16', '1.25.16')

;With cteQry As
(
Select  *, 
        Lead(StartDate) Over (Partition By Name, Size Order By StartDate) NextStartDate,
         DateDiff(d, EndDate, Lead(StartDate) Over (Partition By Name, Size Order By StartDate)) Days
    From #Tbl
)
Select *
    From
        (
        Select  *,
                Row_Number() Over (Partition By Name, Size Order By Days Desc) SortOrder
            From cteQry
        ) A
    Where SortOrder = 1

编辑:没有引导功能。

;With cteQry2 As
(
Select  *,
          DateDiff(d, EndDate, 
                (Select Top 1 StartDate 
                     From #Tbl 
                     Where Name = T1.Name 
                          And Size = T1.Size 
                          And StartDate > T1.StartDate 
                     Order By StartDate)) Days
     From #Tbl T1
)
Select *
    From
        (
        Select  *,
                Row_Number() Over (Partition By Name, Size Order By Days Desc) SortOrder
            From cteQry2
        ) A
    Where SortOrder = 1
     Order By Name, Size, StartDate