2013-01-06 66 views
2

我發現了幾個解決方案one in particular這是非常有幫助,幾乎讓我在那裏,但我堅持最後一點。我現在需要做的是能夠指定CarNumbers的顯示範圍。我有一個表,我需要選擇一列的最大值

的SQL可能會更有意義......

SELECT sr.* FROM StatusReport sr 
INNER JOIN ( SELECT CarNumber, MAX(StatusReportTime) AS MaxDateTime 
FROM StatusReport GROUP BY CarNumber) groupedsr ON sr.CarNumber = 
groupedsr.CarNumber AND sr.StatusReportTime = groupedsr.MaxDateTime 

我基本上希望能夠添加以下通車。

WHERE CarNumber BETWEEN '0' AND '3999' 

任何人都可以幫我嗎?

由於提前,

邁克

+0

您正在使用哪種rdbms? MySQL的? SQLServer的?甲骨文? .... –

回答

1

您可以在外部查詢的結尾處子查詢的末尾GROUP BY條款前加入,或像這樣:

SELECT sr.* 
FROM StatusReport sr 
INNER JOIN 
( 
    SELECT CarNumber, MAX(StatusReportTime) AS MaxDateTime 
    FROM StatusReport 
    WHERE CarNumber BETWEEN '0' AND '3999' 
    GROUP BY CarNumber 
) groupedsr ON sr.CarNumber  = groupedsr.CarNumber 
      AND sr.StatusReportTime = groupedsr.MaxDateTime; 
+0

也可以通過在'INNER JOIN'子查詢中'HAVING'來完成。 – jdotjdot

+0

非常感謝所有的答案,現在對我來說更有意義。再次感謝! – Mike

+1

@jdotjdot - 是的,你是對的。但是因爲你沒有過濾像聚合列那樣的'HAVING MAX(status)<...',所以最好使用'WHERE'子句來做到這一點。 –

0
SELECT sr.* 
FROM StatusReport sr 
INNER JOIN 
    (SELECT CarNumber, 
      MAX(StatusReportTime) AS MaxDateTime 
    FROM StatusReport 
    WHERE CarNumber >0 
    GROUP BY CarNumber) groupedsr ON sr.CarNumber = groupedsr.CarNumber 
AND sr.StatusReportTime = groupedsr.MaxDateTime 
0

你可以這樣做..這將很容易理解,並會簡化您的查詢

with tbl2 as 
    (
    select tbl1.*, 
    row_number() over (order by CarNumber) rtn 
    from 
    (select CarNumber, max(StatusReportTime) as MaxDateTime from [StatusReport] group by   
    CarNumber) as tbl1 
    ) 
    select * from tbl2 where rtn between 0 and 3999 
相關問題