2009-09-08 42 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 
)