根据另一列选择最大日期

Select Max Date based on another column

提问人:courty340 提问时间:11/16/2023 最后编辑:marc_scourty340 更新时间:11/23/2023 访问量:40

问:

我有一个数据集,它具有不同的 submissionid 和 submissiondatetimes 与 invoicenumbers 相关联。我尝试为每个发票号仅选择具有最新提交日期时间的行。示例数据如下,期望的结果是仅返回第 2 行

我尝试过的示例查询如下:

SELECT TOP 1000 
    S.SubissionID,
    BookingID,
    InvoiceNumber,
    InvoiceDate,
    NumberofServices,
    SubmissionDateTime
FROM
    [dbo].[Submission] S
JOIN 
    [dbo].[SubmissionInvoice] SI ON S.SubmissionID = SI.SubmissionID
INNER JOIN 
    (SELECT MAX(SubmissionDateTime maxdate 
     FROM [dbo].[Submission]) m ON m.maxdate = s.SubmissionDateTime

这仅返回具有最新 SubmissionDateTime 的记录,而不考虑 invoicenumber 或 submissionid。

 SELECT TOP 1000 
     S.SubissionID,
     BookingID,
     InvoiceNumber,
     InvoiceDate,
     NumberofServices,
     SubmissionDateTime
 FROM 
     [dbo].[Submission] S
 JOIN 
     [dbo].[SubmissionInvoice] SI ON S.SubmissionID = SI.SubmissionID
                                  AND SubmissionDateTime = (SELECT MAX (SubmissionDateTime) 
                                                            FROM [dbo].[Submission] AS B
                                                            WHERE S.SubmissionID = B.SubmissionID)

这个最大日期过滤似乎没有做任何事情,结果看起来就像我根本没有包含查询的那部分一样。

SQL 最大 maxdate

评论

0赞 jarlh 11/16/2023
TOP 1000 但没有 ORDER BY 会给你或多或少随机的 1000 行。这有关系吗?
0赞 courty340 11/16/2023
我可以按 SubmissionDateTime 添加顺序,但只是想先让它正常工作。
0赞 nbk 11/16/2023
什么不起作用,也不允许使用数据

答:

0赞 GoonerForLife 11/16/2023 #1

如果您的 RDBM 支持,则可以使用 row_number() 等窗口函数。下面是一个示例

SELECT SubissionID
       ,BookingID
       ,InvoiceNumber
       ,InvoiceDate
       ,NumberofServices
       ,SubmissionDateTime
FROM (
SELECT S.SubissionID
    ,BookingID
    ,InvoiceNumber
    ,InvoiceDate
    ,NumberofServices
    ,SubmissionDateTime
    ,row_number() over(partition by InvoiceNumber order by SubmissionDateTime DESC) AS RN
FROM [dbo].[Submission] S
JOIN [dbo].[SubmissionInvoice] SI 
  on S.SubmissionID = SI.SubmissionID) t
WHERE RN = 1