检索具有特定值的最新记录
Retrieving latest records with specific values
我想做的基本上是有一个事件列表。每个事件都有多个标准和几个键。我想使用特定行具有的值检索每个唯一键的最新记录。我尝试过的:
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
Returns:
tidpunkt sin ino
1212649647 3566454 554
这将检索我想要的特定记录。但在这种情况下,在这种情况下,我需要该行的另一个参数,例如终端。
但是如果我在 select 中使用 b.terminal,我必须将它分组,到那时它不会给我实际正确的终端,而是抓住了错误的终端。
所以这里的问题是,我如何实际使用属于我之前使用过 max(b.event_time) 的行的 b.terminal?
我有:
tidpunkt sin ino terminal
1212649647 3566454 554 bandy
1212642065 3566454 554 hockey
我想要什么return:
tidpunkt sin ino terminal
1212649647 3566454 554 bandy
return编辑的内容:
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;
. . .
用于您想要的列。请注意,我还将 table 别名更改为 table 名称的缩写。
我想做的基本上是有一个事件列表。每个事件都有多个标准和几个键。我想使用特定行具有的值检索每个唯一键的最新记录。我尝试过的:
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
Returns:
tidpunkt sin ino
1212649647 3566454 554
这将检索我想要的特定记录。但在这种情况下,在这种情况下,我需要该行的另一个参数,例如终端。
但是如果我在 select 中使用 b.terminal,我必须将它分组,到那时它不会给我实际正确的终端,而是抓住了错误的终端。
所以这里的问题是,我如何实际使用属于我之前使用过 max(b.event_time) 的行的 b.terminal?
我有:
tidpunkt sin ino terminal
1212649647 3566454 554 bandy
1212642065 3566454 554 hockey
我想要什么return:
tidpunkt sin ino terminal
1212649647 3566454 554 bandy
return编辑的内容:
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;
. . .
用于您想要的列。请注意,我还将 table 别名更改为 table 名称的缩写。