如果我有一个表列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)
尽可能防止循环.循环通常会导致游标,游标几乎从不需要,而且通常效率很低.
SELECT TOP 1 ID, Name, Score, [Date]
FROM myTable
WHERE ID = 2
Order BY [Date]
Run Code Online (Sandbox Code Playgroud)
虽然使用 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 的行和最早的日期。
它是可扩展的,就好像需要另一个条件一样,这可以很容易地添加到派生表中。