【问题标题】:Get values from database where column is unique and add condition从列唯一的数据库中获取值并添加条件
【发布时间】:2012-07-27 09:01:26
【问题描述】:

我需要有关高级 SQL 查询 (MSSQL 2000) 的帮助。

我有一个名为 Result 的表格,其中列出了田径 100 米和 200 米的比赛时间。一个跑步者可以有多个比赛时间,但我只想展示每个跑步者在每项赛事中的最佳时间。

Result-table 包含五列,Result_id、sports_id、result_time、result_date、event_code。因此,当我列出值时,sports_id 必须是唯一的,并且 result_time 必须是最快(最低)的值。我还希望能够选择 event_code 应该是“= 1”还是“= 2”,因为 100 和 200 米的结果时间混合在同一个表中。

几天前我问了一个类似的问题,但没有 event_code 条件。

这就是我们想出的答案。

select r.*
from result r
inner join (
    select athelete_id, min(result_time) as FastestTime
    from result
    group by athelete_id
) rm on r.athelete_id = rm.athelete_id and r.result_time = rm.FastestTime

有什么想法可以将 event_code 条件添加到这个 sn-p 中吗?

【问题讨论】:

    标签: php sql sql-server-2000


    【解决方案1】:

    试试这个:

    select r.*
    from result r
    inner join (
        select athelete_id, min(result_time) as FastestTime
        from result
        where event_code = 1
        group by athelete_id
    ) rm on r.athelete_id = rm.athelete_id and r.result_time = rm.FastestTime
    

    【讨论】:

      【解决方案2】:

      在子查询的输出中包含事件代码。然后您可以同时显示所有事件或在外部 where 子句中选择它们:

      select r.*
      from result r inner join
           (select athlete_id, event_code, min(result_time) as FastestTime
            from result
            group by athlete_id, event_code
           ) rm
           on r.athelete_id = rm.athlete_id and
              r.result_time = rm.FastestTime and
              r.event_code = rm.event_code
      -- where event_code = xx
      

      最后一行是一个可选的 WHERE 子句,以防您一次只需要一个事件。

      【讨论】:

      • 谢谢!似乎可行,但在我的情况下发现另一种方法更容易
      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多