sql查询获取最早日期
Posted
技术标签:
【中文标题】sql查询获取最早日期【英文标题】:sql query to get earliest date 【发布时间】:2010-03-06 18:16:24 【问题描述】:如果我有一个包含 id
、name
、score
、date
列的表
我想运行一个 sql 查询来获取 id = 2
在数据集中具有最早日期的记录。
您可以在查询中执行此操作,还是需要在事后循环?
我想获取该记录的所有字段..
【问题讨论】:
【参考方案1】:如果你只想要日期:
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
尽可能避免循环。循环通常会导致游标,而游标几乎从不需要,而且通常效率很低。
【讨论】:
如果我也想得到这个记录的名字怎么办【参考方案2】:SELECT TOP 1 ID, Name, Score, [Date]
FROM myTable
WHERE ID = 2
Order BY [Date]
【讨论】:
【参考方案3】:虽然使用 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且日期最早的行。
它是可扩展的,就好像需要另一个条件一样,这可以很容易地添加到派生表中。
【讨论】:
【参考方案4】:试试
select * from dataset
where id = 2
order by date limit 1
我做sql已经有一段时间了,所以这可能需要一些调整。
【讨论】:
【参考方案5】:使用“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)
【讨论】:
如果有相同的最小日期的行,这可以返回多行。以上是关于sql查询获取最早日期的主要内容,如果未能解决你的问题,请参考以下文章