查询每个小部件最近的两个条目
Posted
技术标签:
【中文标题】查询每个小部件最近的两个条目【英文标题】:Query most recent TWO entries per widget 【发布时间】:2009-09-08 19:54:02 【问题描述】:我有两张桌子。一个(小部件)有一个小部件列表(ID、widget_name、颜色等)和有关它们的数据。 另一个(测试)有一个在小部件(ID、日期、info1、info2 等)上运行的测试列表。
我想要做的是显示最近的两个测试。我认为我真的不需要为此使用表格小部件,但我对其进行了描述,以便您知道我来自哪里。
我构建了一个“总计”查询,该查询使用 MAX() 函数并显示每个 ID 的单个最近日期。然后,我可以使用此查询构建另一个查询,该查询显示有关该小部件在该日期发生的测试的有用信息。不过,我真正需要的是为每个小部件提供最近的两个测试日期。
【问题讨论】:
PS:Widgets 和 Tests 之间是一对多的关系。换句话说,Tests 中的每个 ID 都有很多行。每个测试都占用一行并与特定日期相关联。现在我觉得我说得太多了,所以我要停下来。 你可以编辑你自己的问题——你不需要添加评论来改变它。 【参考方案1】:如果您需要总体上最近的两个测试,那么
Select * From Tests T
Where (Select Count(*) From tests
Where testDate > T.TestDate) < 2
如果您需要对每个 Widget 进行两次最近的测试,那么
Select * From Tests T
Where (Select Count(*) From tests
Where WidgetId = T.WidgetId
And testDate > T.TestDate) < 2
【讨论】:
我不知道我的评论是否通过了。有效!非常感谢【参考方案2】:(假设同一个小部件的所有日期都是唯一的)
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
)
【讨论】:
以上是关于查询每个小部件最近的两个条目的主要内容,如果未能解决你的问题,请参考以下文章