使用top with ties
與row_number()
讓每個供應商的最新發票:
select top 1 with ties
ref02_vr as Vendor_Number
, N102_ri as Vendor_Name
, VendorInvoiceDate
, datediff(day,VendorInvoiceDate,getdate()) as DaysLastInvoiced
from inscio_edi810 a
where a.VendorInvoiceDate >= '2016-01-01 00:37:21.370'
order by row_number() over (partition by ref02_vr order by VendorInvoiceDate desc)
要添加額外的order by
將上述內容放在子查詢中:
select *
from (
select top 1 with ties
ref02_vr as Vendor_Number
, N102_ri as Vendor_Name
, VendorInvoiceDate
, datediff(day,VendorInvoiceDate,getdate()) as DaysLastInvoiced
from inscio_edi810 a
where a.VendorInvoiceDate >= '2016-01-01 00:37:21.370'
order by row_number() over (partition by ref02_vr order by VendorInvoiceDate desc)
) s
order by DaysLastInvoiced desc
with common_table_expression as()
使用row_number()
版本:
;with cte as (
select *
, rn = row_number() over (
partition by ref02_vr
order by VendorInvoiceDate desc
)
from inscio_edi810
)
select
ref02_vr as Vendor_Number
, N102_ri as Vendor_Name
, VendorInvoiceDate
, datediff(day,VendorInvoiceDate,getdate()) as DaysLastInvoiced
from cte
where rn = 1
order by DaysLastInvoiced desc
cross
apply
版本:
select distinct
a.ref02_vr as Vendor_Number
, a.N102_ri as Vendor_Name
, x.VendorInvoiceDate
, datediff(day,x.VendorInvoiceDate,getdate()) as DaysLastInvoiced
from inscio_edi810 a
cross apply (
select top 1 VendorInvoiceDate
from inscio_edi810 as i
where i.ref02_vr =a.ref02_vr
order by i.VendorInvoiceDate desc
) as x;
order by DaysLastInvoiced desc
每個三個版本rextester演示:http://rextester.com/UBX8146
每個回報:
+---------------+------------------+---------------------+------------------+
| Vendor_Number | Vendor_Name | VendorInvoiceDate | DaysLastInvoiced |
+---------------+------------------+---------------------+------------------+
| 3568 | a INDUSTRIES INC | 2016-11-12 07:02:41 | 165 |
| 3215 | o Outdoors, Inc. | 2016-03-02 07:39:30 | 420 |
+---------------+------------------+---------------------+------------------+
請包括輸出應該的樣子。 –