检索具有特定值

时间:2018-06-07 11:38:18

标签: sql sql-server ssms ssms-2017

我尝试做的基本上是有一个事件列表。每个事件都有多个标准和几个键。我想检索每个唯一键的lates记录以及该特定行具有的值。我尝试过:

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

这将检索我想要的特定记录。但在这种情况下,我需要来自该行的另一个参数,例如终端。

但是如果我在选择中使用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

注意终端如何不属于其余部分。因此,我的小组不是要走的路。老实说,我希望有一种方法可以将相关记录用于所使用的聚合函数,但此时我不能单独进一步

1 个答案:

答案 0 :(得分:2)

您想要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;

. . .适用于您想要的列。请注意,我还将表别名更改为表名的缩写。