sql查询获取最早的日期

leo*_*ora 27 sql sql-server

如果我有一个表列id,name,score,date

我想运行一个SQL查询来获取id = 2数据集中最早日期的记录.

您可以在查询中执行此操作,还是需要在事后循环?

我想获得该记录的所有字段..

Zyp*_*rax 39

如果您只想要日期:

SELECT MIN(date) as EarliestDate
FROM YourTable
WHERE id = 2
Run Code Online (Sandbox Code Playgroud)

如果您想要所有信息:

SELECT TOP 1 id, name, score, date
FROM YourTable
WHERE id = 2
ORDER BY Date
Run Code Online (Sandbox Code Playgroud)

尽可能防止循环.循环通常会导致游标,游标几乎从不需要,而且通常效率很低.


sha*_*esh 6

SELECT TOP 1 ID, Name, Score, [Date]
FROM myTable
WHERE ID = 2
Order BY [Date]
Run Code Online (Sandbox Code Playgroud)


Kev*_*ann 5

虽然使用 TOP 或子查询都可以工作,但我会将问题分解为以下步骤:

查找目标记录

SELECT MIN( date ) AS date, id
FROM myTable
WHERE id = 2
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

加入以获取其他领域

SELECT mt.id, mt.name, mt.score, mt.date
FROM myTable mt
INNER JOIN
( 
   SELECT MIN( date ) AS date, id
   FROM myTable
   WHERE id = 2
   GROUP BY id
) x ON x.date = mt.date AND x.id = mt.id
Run Code Online (Sandbox Code Playgroud)

虽然这个使用派生表的解决方案更长,但它是:

  • 更容易测试
  • 自我记录
  • 可扩展

由于查询的部分可以独立运行,因此测试更容易。

它是自我记录的,因为查询直接反映了需求,即派生表列出了 id = 2 的行和最早的日期。

它是可扩展的,就好像需要另一个条件一样,这可以很容易地添加到派生表中。