首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择每个项目的最新日期

选择每个项目的最新日期
EN

Stack Overflow用户
提问于 2021-09-16 13:49:44
回答 2查看 36关注 0票数 0

我有两张桌子,假设是tableA和tableB。

表A

代码语言:javascript
复制
create table tableA
(ID int, DocumentDate datetime2, DocumentName varchar(3), ItemID int);

insert into tableA (ID, DocumentDate, DocumentName, ItemID)
values (1, '2019-08-01 12:00:00', 'A-1', 1),
(2, '2020-05-12 13:00:00', 'B-2', 1),
(3, '2021-07-01 14:00:00', 'C-3', 1),
(4, '2020-01-01 12:00:00', 'D-4', 2),
(5, '2021-02-01 13:00:00', 'E-5', 2),
(6, '2021-07-02 14:00:00', 'F-6', 2);

这是B表

代码语言:javascript
复制
create table tableB
(ID int, ItemCode varchar(3));

insert into tableB (ID, ItemCode)
values (1, 'AAA'),
(2, 'BBB');

以下是我的SQL Server查询

代码语言:javascript
复制
select 
    A.ID, 
    A.DocumentDate, 
    A.DocumentName, 
    B.ItemCode 
from tableA A
left join tableB B on B.ID = A.ItemID

和结果should be like this

我想为AAA选择第三个,为BBB选择第六个,它有最新的日期。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-16 13:53:45

您可以使用apply

代码语言:javascript
复制
select b.*, a.*
from tableB b outer apply
     (select top (1) a.*
      from tableA a
      where a.itemId = b.Id
      order by a.documentdate desc
     ) a;

使用tableA(item, documentdate)上的索引,这通常会有非常好的性能

票数 1
EN

Stack Overflow用户

发布于 2021-09-16 13:54:08

看起来很简单:

代码语言:javascript
复制
WITH cteDocuments As
(
    SELECT
        ID,
        DocumentDate,
        DocumentName,
        ItemID,
        ROW_NUMBER() OVER (PARTITION BY ItemID ORDER BY DocumentDate DESC) As RN
    FROM
        tableA
)
SELECT
    A.ID,
    A.DocumentDate,
    A.DocumentName,
    B.ItemCode
FROM
    cteDocuments As A
    LEFT JOIN tableB As B ON B.ID = A.ItemID
WHERE
    A.RN = 1
;

ROW_NUMBER

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69209656

复制
相关文章

相似问题

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