2011-09-29 62 views
0

我有两个表格:task_runsinteger_values。我正在运行查询以获取此输出:如何从SQL查询的输出中获得最大值

task_name   start_time   value 
acc_clock   2010-05-27    4 
icc_opy   2010-05-28    5 
icc_dtaf   2010-05-29    3 
acc_clock   2010-05-25    34 
icc_ruty   2010-05-23    33 
icc_ruty   2010-05-22    45 

这是我输出的来自两个不同表的SQL查询。请注意,在此输出中,task_name发生两次。但我所要的输出有task_name只有一个发生及其相关的值应该是最大start_time,像这样:

task_name   start_time   value 
icc_opy   2010-05-28    5 
icc_dtaf   2010-05-29    3 
acc_clock   2010-05-25    34 
icc_ruty   2010-05-23    33 

我的查询是:

select t.task_name, max(t.start_time), i.value 
from task_runs t, integer_values i 
where i.run_id = t.id 
and t.username = 'amit' 
and t.start_time > '2010-05-20' 
order by t.task_name 
group by t.task_name 

为什么它不工作?

+0

检查此链接http://stackoverflow.com/questions/612231/how-can-i-select-rows-with-maxcolumn-value-distinct-by-another-column-in- sql 可能是它的帮助ü – Naresh

+0

@ user979553您可以发布您用来获取第一个结果集的查询吗? –

回答

1
SELECT task_name, MAX(start_time) FROM your_table GROUP BY task_name; 

集团将采取复制,并将它们组合在这种情况下,上TASK_NAME。 MAX将会取得最高的价值。 SO:当存在更多具有相同名称的任务时,只显示一次,只显示具有最高start_time的任务。

+0

这实际上并不一定会显示与MAX(start_time)...只是任何值相关联的值。 – Konerak

0
SELECT * FROM yourTable y 
JOIN 
(select task_name, MAX(start_time) maxtime FROM yourTable GROUP BY task_name) highest 
ON y.task_name = highest.task_name AND y.start_time = highest.start_time 
+0

此查询的成绩很糟糕。你能解释为什么我的解决方案不起作用,或者你为什么选择这种方法? – JNDPNT

+0

如果他只需要task_name和start_time,则您的查询有效。但是,如果他想要价值? – Konerak

+0

比我编辑我的帖子,并添加到选择条款的价值:p – JNDPNT

0
;WITH max_start AS 
(
SELECT 
task_name 
,start_time 
,value 
,row_number() OVER (PARTITION BY taskname ORDER BY start_time DESC) as row 
FROM your_table 
) 
SELECT 
task_name 
,start_time 
,value 
FROM max_start 
WHERE row = 1 
+0

提供素的解决方案 –

+0

@NavrattanBansal - 如果这个答案对你有帮助,请随时接受它 – Dibstar

相关问题