如果我的表格包含id
列,name
,score
,date
我想运行一个sql查询来获取数据集中最早日期为id = 2
的记录。
您可以在查询中执行此操作,还是需要在事后循环?
我想获得该记录的所有字段..
答案 0 :(得分:36)
如果您只想要日期:
SELECT MIN(date) as EarliestDate
FROM YourTable
WHERE id = 2
如果您需要所有信息:
SELECT TOP 1 id, name, score, date
FROM YourTable
WHERE id = 2
ORDER BY Date
尽可能防止循环。循环通常会导致游标,游标几乎从不需要,而且通常效率很低。
答案 1 :(得分:6)
SELECT TOP 1 ID, Name, Score, [Date]
FROM myTable
WHERE ID = 2
Order BY [Date]
答案 2 :(得分:2)
尝试
select * from dataset
where id = 2
order by date limit 1
因为我做了sql,所以这可能需要一些调整。
答案 3 :(得分:1)
使用“limit”和“top”不适用于所有SQL服务器(例如使用Oracle)。 您可以在纯sql中尝试更复杂的查询:
select mt1.id, mt1."name", mt1.score, mt1."date" from mytable mt1
where mt1.id=2
and mt1."date"= (select min(mt2."date") from mytable mt2 where mt2.id=2)
答案 4 :(得分:1)
虽然使用TOP或子查询都有效,但我会将问题分解为步骤:
查找目标记录
SELECT MIN( date ) AS date, id
FROM myTable
WHERE id = 2
GROUP BY id
加入其他字段
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
虽然使用派生表的此解决方案较长,但它是:
测试更容易,因为查询的某些部分可以独立运行。
它是自我记录,因为查询直接反映了要求 即派生表列出id = 2且具有最早日期的行。
它是可扩展的,好像需要另一个条件,这可以很容易地添加到派生表中。