2009-09-08 39 views
0

我有兩個表。一個(小工具)有一個小工具列表(ID,widget_name,顏色等)和關於他們的數據。 另一個(測試)有一個在小部件(ID,日期,info1,info2等)上運行的測試列表。查詢每個部件最近的兩個條目

我想要做的是顯示最近的兩個測試。我不認爲我真的需要使用表格小工具,但我描述它,所以你會知道我從哪裏來。

我已經構建了一個使用MAX()函數的「總計」查詢,併爲每個ID顯示單個最近日期。然後,我可以使用此查詢構造另一個查詢,顯示有關該小部件在該日期發生的測試的有用信息。我真正需要的是爲每個部件提供最近的兩個測試日期。

+0

PS:小工具和測試之間有一對多的關係。換句話說,測試中的每個ID都有很多行。每個測試需要一行,並與特定的日期相關聯。現在我覺得我說話太多了,所以生病停下來。 – Matt

+0

你可以編輯你自己的問題 - 你不需要添加評論來改變它。 –

回答

2

如果需要整體最近的兩次測試,那麼

Select * From Tests T 
Where (Select Count(*) From tests 
     Where testDate > T.TestDate) < 2 

如果你需要爲每個插件的最近兩次的測試,然後

Select * From Tests T 
Where (Select Count(*) From tests 
     Where WidgetId = T.WidgetId 
      And testDate > T.TestDate) < 2 
+0

編輯刪除bug –

+0

美麗。工作得很好。感謝您的快速響應 – Matt

+0

我不知道我的評論是否通過。有效!萬分感謝 – Matt

0

(假設爲同一窗口小部件的所有日期是獨特的)

select T.* 
from Widget W 
join Test T on T.widget_id = W.id 
where T.date >= (
    select max(T2.date) 
    from Test T2 
    where T2.widget_id = W.id 
    and T2.date < (
     select max(T3.date) 
     from Test T3 
     where T3.widget_id = W.id 
    ) 
) 
or T.date == (
    select max(T2.date) 
    from Test T2 
    where T2.widget_id = W.id 
)