[英]SQL max(DateTime) and category filter without group by
我寫了下面的查詢:
SELECT DateTime, configId, rowId
FROM linkedTableDefinition a,
INNER JOIN tableDefinition b,
ON a.Target = b.Id
INNER JOIN ViewWithInfo c,
ON a.Target = c.Id
這給出以下輸出:
DateTime configId rowId
12-09-2013 11:00 4 12
12-09-2013 12:00 4 12
12-09-2013 13:00 3 11
12-09-2013 12:00 3 11
12-09-2013 11:00 4 11
我需要的輸出如下:每個rowId和configId組合我需要datetime列中的最大值。 因此,從上面的示例中,我需要以下輸出:
DateTime configId rowId
12-09-2013 12:00 4 12
12-09-2013 13:00 3 11
12-09-2013 11:00 4 11
有人知道答案嗎? 我想避免使用GROUP BY,因為select語句將擴展更多的列。
提前致謝
編輯當前查詢:
SELECT testResults.ResultDate, testResults.ConfigurationId, TestResultsTestCaseId
FROM dbo.FactWorkItemLinkHistory workItemLink
INNER JOIN dbo.DimWorkItem workItem
ON workItem.System_Id = workItemLink.TargetWorkItemID
INNER JOIN dbo.TestResultView testResults
ON testResults.TestCaseId = workItemLink.TargetWorkItemID
WHERE
RemovedDate = convert(datetime, '9999-01-01 00:00:00.000')
AND workItemLink.SourceWorkItemID = 7
AND workItem.System_WorkItemType = 'Test Case'
SELECT *
FROM
(
SELECT DateTime, configId, rowId,
ROW_NUMBER() OVER(PARTITION BY configId, rowId ORDER BY DateTime DESC) AS RowNum
FROM linkedTableDefinition a
INNER JOIN tableDefinition b ON a.Target = b.Id
INNER JOIN ViewWithInfo c ON a.Target = c.Id
) src
WHERE src.RowNum = 1
您可以這樣做,並適當地替換適當的聯接字段:
SELECT testResults.ResultDate, testResults.ConfigurationId, testResults.TestCaseId,
(SELECT MAX(ResultDate) FROM dbo.TestResultView WHERE TestCaseId = testResults.TestCaseId AND ConfigurationId = testResults.ConfigurationId) AS MaxDate
FROM dbo.FactWorkItemLinkHistory workItemLink
INNER JOIN dbo.DimWorkItem workItem
ON workItem.System_Id = workItemLink.TargetWorkItemID AND workItemLink.TeamProjectCollectionSK = workItem.TeamProjectCollectionSK
INNER JOIN dbo.TestResultView testResults
ON testResults.TestCaseId = workItemLink.TargetWorkItemID
WHERE
RemovedDate = convert(datetime, '9999-01-01 00:00:00.000')
AND workItemLink.SourceWorkItemID = 7
AND workItem.System_WorkItemType = 'Test Case'
AND workItem.System_RevisedDate = convert(datetime, '9999-01-01 00:00:00.000')
對表中的列了解不多,但是類似這樣。...在CROSS APPLY中進行查詢,獲得每個結果的最高TOP 1日期,然后輸入結果集或外部查詢。
SELECT configId, rowId, tbl.DateTime
FROM linkedTableDefinition a,
INNER JOIN tableDefinition b,
ON a.Target = b.Id
INNER JOIN ViewWithInfo c,
ON a.Target = c.Id
CROSS APPLY
(
SELECT TOP 1 DateTime
FROM whatevertable
WHERE whatevertable.CommonCol = TabeFrmOuterQuery.CommonCol
ORDER BY DateTime DESC
) tbl
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.