[英]Retrieving latest records with specific values
我是tryint要做的基本上是一个事件列表。 在每个事件上,都有多个条件和几个键。 我想使用该特定行具有的值来检索每个唯一键的最新记录。 我试过的
SELECT max(b.event_time) AS 'tidpunkt'
,b.sin
,a.ino
INTO #timer_remove_whom_all
FROM #int a
JOIN log b ON a.sin = b.sin
WHERE a.deal_id = 'PSE'
AND convert(DATE, dateadd(second, b.event_time, '800101'), 102) = convert(DATE, getdate() - 2, 102)
GROUP BY b.sin
,a.ino
返回值:
tidpunkt sin ino
1212649647 3566454 554
这将检索我想要的特定记录。 但是在这种情况下,在这种情况下,我需要该行中的另一个参数,例如terminal。
但是,如果我在选择中使用b.terminal,我必须将其分组,到那时它不会给我真正正确的终端,但是会抓到错误的终端。
所以这里的问题是,我如何真正使它属于我以前使用过max(b.event_time)的行的b.terminal?
我有的:
tidpunkt sin ino terminal
1212649647 3566454 554 bandy
1212642065 3566454 554 hockey
我要退货:
tidpunkt sin ino terminal
1212649647 3566454 554 bandy
返回的内容:
tidpunkt sin ino terminal
1212649647 3566454 554 hockey
注意终端不属于其余部分。 因此,我的小组不是要走的路。 老实说,我希望有某种方式可以将相关记录获取到所使用的任何聚合函数,但是我现在不能孤单
您想要row_number()
:
SELECT . . .
INTO #timer_remove_whom_all
FROM (SELECT . . .,
ROW_NUMBER() OVER (PARTITION BY l.sin, i.ino ORDER BY l.event_time DESC) as seqnum
FROM #int i JOIN
log l
ON i.sin = l.sin
WHERE i.deal_id = 'PSE' AND
convert(DATE, dateadd(second, l.event_time, '800101'), 102) = convert(DATE, getdate() - 2, 102)
) il
WHERE seqnum = 1;
的. . .
. . .
用于所需的列。 请注意,我还将表别名更改为表名的缩写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.