Tho*_*zer 2 sql database oracle postgresql plsql
在项目中选择数据时出现性能问题.
有一个包含3列的表:"id","time"和"group"
所以表数据可能如下所示:
ID | TIME | GROUP
------------------------
1 | 20090805 | A
2 | 20090804 | A
3 | 20090804 | B
4 | 20090805 | B
5 | 20090803 | A
6 | 20090802 | B
Run Code Online (Sandbox Code Playgroud)
...等等.
现在的任务是在给定日期的每个组中选择"当前"条目(它们的ID).也就是说,对于每个组,查找给定日期的最新条目.
以下前提条件适用:
我目前所做的是一个多步骤过程,我想将其转换为单个SELECT语句:
SELECT DISTINCT group FROM table 找到可用的组SELECT * FROM table WHERE time<selectionDate AND group=loop ORDER BY time DESC显然这不是最佳的.
如果一些更有经验的SQL专家可以帮助我找到将这些步骤放在一个语句中的解决方案,我将非常高兴.
谢谢!
OMG*_*ies 10
以下内容适用于SQL Server 2005+和Oracle 9i +:
WITH groups AS (
SELECT t.group,
MAX(t.time) 'maxtime'
FROM TABLE t
GROUP BY t.group)
SELECT t.id,
t.time,
t.group
FROM TABLE t
JOIN groups g ON g.group = t.group AND g.maxtime = t.time
Run Code Online (Sandbox Code Playgroud)
任何数据库应该支持:
SELECT t.id,
t.time,
t.group
FROM TABLE t
JOIN (SELECT t.group,
MAX(t.time) 'maxtime'
FROM TABLE t
GROUP BY t.group) g ON g.group = t.group AND g.maxtime = t.time
Run Code Online (Sandbox Code Playgroud)
以下是我在SQL Server中的操作方法:
SELECT * FROM table WHERE id in
(SELECT top 1 id FROM table WHERE time<selectionDate GROUP BY [group] ORDER BY [time])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2250 次 |
| 最近记录: |