繁体   English   中英

使用 T-SQL 从 SQL 服务器获取最旧的记录

[英]Getting oldest record from SQL Server using T-SQL

我有一个 T-SQL 查询,我需要在其中找到最旧的日期记录。 我是这样写的:

SELECT
    T0.ItemCode, T0.OpenQty AS 'Qty', MIN(T1.DocDate) AS 'DocDate', 
    T1.DocNum, T1.CardCode, T1.SlpCode AS 'Sales Person', T0.WhsCode
FROM
    RDR1 T0
INNER JOIN
    ORDR T1 ON T0.DocEntry = T1.DocEntry
WHERE 
    T0.linestatus = 'O'
GROUP BY 
    T0.ItemCode, T0.OpenQty , T1.DocNum, T1.CardCode, T1.SlpCode , T0.WhsCode

但它没有返回最旧的日期记录。

数据显示在此屏幕截图中:

在此处输入图像描述

您可以使用ROW_NUMBER()在内部查询中通过升序T1.DocDate对记录进行排名,然后在外部查询中使用最旧的 select 对记录进行排名:

Select *
From (
    Select  
        T0.ItemCode, 
        T0.OpenQty as 'Qty', 
        T1.DocDate,
        T1.DocNum, 
        T1.CardCode, 
        T1.SlpCode as 'Sales Person', 
        T0.WhsCode,
        Row_Number() Over(Order By T1.DocDate) rn
    From RDR1 T0
    Inner Join ORDR T1 on T0.DocEntry = T1.DocEntry
    Where T0.linestatus = 'O'
) x
Where rn = 1

这将为您提供表中最旧的记录。 如果您需要获取每个组中最旧的记录,则可以在ROW_NUMBER() function 中添加PARTITION BY子句。

注意:这还假设T1.DocDate是类似日期的数据类型,通过查看您的示例数据似乎是(并且应该是)这种情况。

你为什么要写自我加入? 如果您需要从表中获取 10 条最旧的记录,则只需按日期按升序对表进行排序并列出前 10 行。

例如 -

Select  top 10 T0.ItemCode, T0.OpenQty as 'Qty', T1.DocDate as 'DocDate', T1.DocNum, T1.CardCode, T1.SlpCode as 'Sales Person', T0.WhsCode
From RDR1 T0
Where T0.linestatus = 'O'
order by T1.DocDate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM