[英]Query to retrieve only the row with the biggest ID
我想编写一个查询以仅返回PeriodID是每个documentID的BIGGEST的行,例如:
Table1: DOCUMENT
DocumentID ItemName
-------------------------
1 Doc1
1 Doc1
1 Doc1
2 Doc2
3 Doc3
Table2: DOC_PERIOD
PeriodID StartDate EndDate DocumentID
----------------------------------------------------
20 1/1/2001 2/2/2002 1
30 2/1/2001 2/3/2012 1
40 3/2/2012 8/5/2012 1
25 3/2/2012 8/5/2012 2
35 3/2/2012 8/5/2012 2
45 3/2/2012 8/5/2012 3
EXPECTED OUTPUT
DocumentID ItemName PeriodID StartDate EndDate
--------------------------------------------------------------------------
1 Doc1 40 3/2/2012 8/5/2012
2 Doc2 35 3/2/2012 8/5/2012
3 Doc3 45 3/2/2012 8/5/2012
SELECT * FROM DOCUMENT
INNER JOIN DOC_PERIOD ON DOCUMENT.DocumentID = DOC_PERIOD.DocumentID
-- SCRIPT TO GET THE MAX PERIODID HERE
我的查询应如何显示?
您没有指定要使用的RDBMS,但如果数据库支持,则可以使用row_number()
获得结果:
select DocumentId,
ItemName,
PeriodId,
StartDate,
EndDate
from
(
select d.DocumentId,
d.ItemName,
dp.PeriodId,
dp.StartDate,
dp.EndDate,
ROW_NUMBER() over(partition by d.documentid order by dp.periodid desc) rn
from dbo.document d
inner join dbo.doc_period dp
on d.DocumentId = dp.DocumentId
) src
where rn = 1
尝试以下查询...将为您提供帮助...
SELECT ts.DocumentID,ts.ItemName,ts.PeriodID,tp.StartDate,tp.EndDate
FROM
(SELECT DOCUMENT.DocumentID ,DOCUMENT.ItemName ,MAX(PeriodID) PeriodID
FROM DOCUMENT
INNER JOIN
DOC_PERIOD ON
DOCUMENT.DocumentID = DOC_PERIOD.DocumentID
group by DOCUMENT.DocumentID ,DOCUMENT.ItemName) ts
INNER JOIN
(SELECT DocumentID, Periodid,StartDate,EndDate from DOC_PERIOD) tp
ON ts.periodId = tp.periodID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.