sql查询获取最早的日期

时间:2010-03-06 18:16:25

标签: sql sql-server

如果我的表格包含id列,namescoredate

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

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

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

5 个答案:

答案 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且具有最早日期的行。

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