2010-03-06 262 views
19

,如果我有列ID,姓名,分数,日期SQL查询来获取最早日期

一个表,我想运行一个SQL查询来获取记录其中id = 2与数据的最早日期组。

你可以在查询内做到这一点,或者你需要在事后循环吗?


编辑:为了明确,我想获得该记录的所有字段。 。

回答

28

如果你只是想日期:

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 

防止环路时即可。循环往往导致游标,而游标几乎不是必需的,而且往往效率非常低。

+0

如果我想获取该记录的名称,该怎么办 – leora 2010-03-06 18:34:30

5
SELECT TOP 1 ID, Name, Score, [Date] 
FROM myTable 
WHERE ID = 2 
Order BY [Date] 
2

尝试

select * from dataset 
where id = 2 
order by date limit 1 

已经有一段时间,因为我做的SQL,所以这可能需要一些调整。

1

使用“限制”和“顶部”不适用于所有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) 
+0

如果有最低日期相同的行,则可以返回多行。 – 2017-08-22 13:05:45

0

在使用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的行的最早日期。

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