簡體   English   中英

哪些SQL Server(T-SQL)查詢可以獲取此結果?

[英]What SQL Server (T-SQL) Query can fetch this result?

我有一個包含40,000條記錄的數據集。 格式如下所示。

Title  | Publication Date
-------|-----------------
Book-A |   2016-10-20
Book-A |   2017-08-14
Book-B |   2016-09-22
Book-B |   2017-03-16
Book-B |   2017-11-26
Book-C |   2016-06-13
Book-C |   2017-04-15
Book-C |   2016-11-23
Book-C |   2017-12-28

我希望SQL查詢返回具有最新出版日期的 唯一書名 (如下所示)

Title  | Publication Date
-------|-----------------
Book-A |   2017-08-14
Book-B |   2017-11-26
Book-C |   2017-12-28

實現此目標的T-SQL查詢將是什么?

SELECT [Title],
       Max([Publication Date]) [Publication Date]
FROM   [DataSet]
GROUP  BY [Title]

一種選擇使用等級分析功能:

SELECT Title, [Publication Date]
FROM
(
    SELECT Title, [Publication Date],
        RANK() OVER (PARTITION BY Title ORDER BY [Publication Date] DESC) rank
    FROM yourTable
) t
WHERE rank = 1
ORDER BY Title;

如果在最近的日期出現平局,此方法將捕獲給定標題的多個記錄。 如果你堅持在每個標題一個最新記錄,你可以代替RANKROW_NUMBER 更好的是,保留RANK並將邏輯添加到ORDER BY子句中,以打破平局。

使用聚合函數MAX()

CREATE TABLE Table1(
    Title [nvarchar](50) NULL,
    PublicationDate [datetime] NULL
)

Insert into Table1 values('Book-A', '2016-10-20')
Insert into Table1 values('Book-A', '2017-08-14')
Insert into Table1 values('Book-A', '2016-09-22')
Insert into Table1 values('Book-B', '2017-03-16')
Insert into Table1 values('Book-B', '2017-11-26')
Insert into Table1 values('Book-C', '2016-06-13')
Insert into Table1 values('Book-C', '2017-04-15')
Insert into Table1 values('Book-C', '2016-11-23')
Insert into Table1 values('Book-C', '2017-12-28')

Select Title, format(Max(PublicationDate), 'yyyy-MM-dd') as [Publication Date]
from Table1 group by Title

Drop Table Table1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM