首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从每张客户发票中选择最新开票日期,其中多张发票来自同一客户

从每张客户发票中选择最新开票日期,其中多张发票来自同一客户
EN

Stack Overflow用户
提问于 2017-04-27 04:27:06
回答 1查看 349关注 0票数 2

我只需要它从表格中拉出最上面的“最后开票日期”,而不是所有的。你知道怎么做吗?或者谁能给我指出正确的方向。我是sql查询的新手。我使用的是MS sql sever 2016。

代码语言:javascript
复制
Vendor_Number   Vendor_Name       VendorInvoiceDate     DaysLastInvoiced
    3568    a INDUSTRIES INC    2016-11-12 07:02:41.743   165
    3568    a INDUSTRIES INC    2016-10-08 07:03:31.170   200
    3568    a INDUSTRIES INC    2016-10-06 07:09:46.880   202
    3568    a INDUSTRIES INC    2016-09-21 07:04:30.267   217
    3568    a INDUSTRIES INC    2016-04-26 07:04:27.570   365
    3215    o Outdoors, Inc.    2016-03-02 07:39:30.137   420
    3215    o Outdoors, Inc.    2016-02-25 07:24:04.207   426
3215    o Outdoors, Inc.    2016-02-22 07:02:51.787 429  

在此处输入代码

代码语言:javascript
复制
Select distinct
      REF02_VR as Vendor_Number
    , N102_RI as Vendor_Name
    , VendorInvoiceDate
    , DATEDIFF(day,(select VendorInvoiceDate),Getdate()) AS DaysLastInvoiced
From 
     INSCIO_EDI810 a
WHERE
     1 = 1   
and 
    a.VendorInvoiceDate >= '2016-01-01 00:37:21.370'
order by
    N102_ri, a.VendorInvoiceDate desc
EN

回答 1

Stack Overflow用户

发布于 2017-04-27 04:30:09

结合使用和来获取每个供应商的最新发票:

代码语言:javascript
复制
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,请将上面的代码放入子查询中:

代码语言:javascript
复制
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

使用版本的:

代码语言:javascript
复制
;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 版本:

代码语言:javascript
复制
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

每个返回:

代码语言:javascript
复制
+---------------+------------------+---------------------+------------------+
| 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 |
+---------------+------------------+---------------------+------------------+
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43643915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档