【问题标题】: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 都有很多行。每个测试都占用一行并与特定日期相关联。现在我觉得我说得太多了,所以我要停下来。
  • 你可以编辑你自己的问题——你不需要添加评论来改变它。

标签: sql ms-access date


【解决方案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
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多