我怎样才能拥有所有值的最大日期?

时间:2013-07-03 15:23:04

标签: tsql

我正试图从“队列”表中获取每个元素的日期值

从表格(仅显示前30名)

element                     added                   processed
order-confirmation          2013-07-03 14:12:02 2013-07-03 14:12:03
virtual-product-splitter    2013-07-03 14:12:02 2013-07-03 14:12:07
fraud-protect           2013-07-03 14:12:02 2013-07-03 14:12:11
giftcard-creator            2013-07-03 14:12:02 2013-07-03 14:12:15
code-dispatcher         2013-07-03 14:12:02 0001-01-01 00:00:00
order-confirmation          2013-07-03 14:10:01 2013-07-03 14:10:02
virtual-product-splitter    2013-07-03 14:10:01 2013-07-03 14:10:06
fraud-protect           2013-07-03 14:10:01 2013-07-03 14:10:10
giftcard-creator            2013-07-03 14:10:01 2013-07-03 14:10:14
code-dispatcher         2013-07-03 14:10:01 2013-07-03 14:10:19
order-confirmation          2013-07-03 14:08:01 2013-07-03 14:08:02
virtual-product-splitter    2013-07-03 14:08:01 2013-07-03 14:08:05
fraud-protect           2013-07-03 14:08:01 2013-07-03 14:08:09
giftcard-creator            2013-07-03 14:08:01 2013-07-03 14:08:13
code-dispatcher         2013-07-03 14:08:01 2013-07-03 14:08:18
code-dispatcher         2013-07-03 14:06:02 2013-07-03 14:06:19
order-confirmation          2013-07-03 14:06:01 2013-07-03 14:06:02
virtual-product-splitter    2013-07-03 14:06:01 2013-07-03 14:06:06
fraud-protect           2013-07-03 14:06:01 2013-07-03 14:06:10
giftcard-creator            2013-07-03 14:06:01 2013-07-03 14:06:14
order-confirmation          2013-07-03 14:04:02 2013-07-03 14:04:03
virtual-product-splitter    2013-07-03 14:04:02 2013-07-03 14:04:07
fraud-protect           2013-07-03 14:04:02 2013-07-03 14:04:11
giftcard-creator            2013-07-03 14:04:02 2013-07-03 14:04:15
code-dispatcher         2013-07-03 14:04:02 2013-07-03 14:04:19
order-confirmation          2013-07-03 14:02:01 2013-07-03 14:02:03
virtual-product-splitter    2013-07-03 14:02:01 2013-07-03 14:02:06
fraud-protect           2013-07-03 14:02:01 2013-07-03 14:02:10
giftcard-creator            2013-07-03 14:02:01 2013-07-03 14:02:14
code-dispatcher         2013-07-03 14:02:01 2013-07-03 14:02:19

操作

select distinct element from sr_queue

'c5-code-integration'
'c5-debitor-integration'
'c5-order-integration'
'c5-product-integration'
'code-dispatcher'
'fraud-protect'
'giftcard-creator'
'order-confirmation'
'packaged-confirmation'
'virtual-product-splitter'

我试图将最大日期(因为有几个)附加到每个元素,但是

select element, max(added), processed
from sr_queue 
where element in (
   'c5-code-integration',
   'c5-debitor-integration',
   'c5-order-integration',
   'c5-product-integration',
   'code-dispatcher',
   'fraud-protect',
   'giftcard-creator',
   'order-confirmation',
   'packaged-confirmation',
   'virtual-product-splitter')

我该如何创建选择?

所以我可以得到:

order-confirmation          2013-07-03 14:12:02 2013-07-03 14:12:03
virtual-product-splitter    2013-07-03 14:12:02 2013-07-03 14:12:07
fraud-protect               2013-07-03 14:12:02 2013-07-03 14:12:11
giftcard-creator            2013-07-03 14:12:02 2013-07-03 14:12:15
code-dispatcher             2013-07-03 14:12:02 0001-01-01 00:00:00
c5-code-integration         2013-07-03 14:12:02 2013-07-03 14:12:15
...

我在代码工作3天后完全消失了:(

3 个答案:

答案 0 :(得分:3)

select element, max(added), max(processed)
from sr_queue 
group by element

编辑:

select element, added, processed
from sr_queue q
where added = (SELECT MAX(added) FROM sr_queue s WHERE s.element = q.element)

或另一种可能性:

SELECT element, added, processed
FROM sr_queue s 
INNER JOIN (
   SELECT element, MAX(added)
   FROM sr_queue 
   GROUP BY element
) q ON s.element = q.element

答案 1 :(得分:3)

使用GROUP BY代替DISTINCT

SELECT
     element,
     MAX(added)
FROM
    sr_queue
GROUP BY
    element

答案 2 :(得分:0)

假设最新版本的MS SQL Server

 select element, added, processed from
 (select *, row_number() over (partition by element order by added desc) as ranker
 from sr_queue q ) Z
 where ranker = 1