假设我有一张桌子:
Name, status, timestamp
我想选择与status ='active'匹配的行,但只选择那些具有最新时间戳的行。所以,如果有这样的行:
Bob, active, 5/10/2010
Bob, active, 6/12/2010
Ann, inactive, 6/12/2000
Ann, active, 9/3/2009
Ann, active, 9/25/2010
我希望它返回:
Bob, active, 6/12/2010
Ann, active, 9/25/2010
我该怎么做?我正在使用SQLite,如果重要的话。
谢谢。
答案 0 :(得分:4)
select name, status, max(timestamp)
from my_table
where status = 'active'
group by name, status
答案 1 :(得分:2)
以下是我解决此类问题的方法。您希望每个名称都有一行,以便不存在具有相同名称和更大时间戳的其他行:
SELECT t1.*
FROM MyTable t1
LEFT OUTER JOIN MyTable t2 ON t1.name = t2.name
AND t1.timestamp < t2.timestamp
WHERE t2.name IS NULL
但是这仍然可以为每个名称返回多行,因为对于具有相同最大时间戳的给定名称,您可以有多行。因此,使用主键作为决胜局:
SELECT t1.*
FROM MyTable t1
LEFT OUTER JOIN MyTable t2 ON t1.name = t2.name
AND (t1.timestamp < t2.timestamp OR t1.timestamp = t2.timestamp AND t1.id < t2.id)
WHERE t2.name IS NULL
我假设id
是此示例的主键,但是按时间顺序增加值的任何其他唯一列都可以正常工作。
答案 2 :(得分:0)
SELECT t1.*<br>
FROM TrialTypes t1<br>
LEFT OUTER JOIN TrialTypes t2 ON t1.name = t2.name <br>
AND (t1.start_date < t2.start_date OR t1.start_date = t2.start_date AND t1.rowid < t2.rowid)<br>
WHERE t2.name IS NULL and t1.active_status != 'active'<br>
非常感谢您的帮助。显然,我不仅仅是基本的SQL查询。这有助于教我,谢谢!