Получение последних записей с конкретными значениями - PullRequest
0 голосов
/ 07 июня 2018

То, что я пытаюсь сделать, это в основном иметь список событий.На каждое событие есть несколько критериев и несколько ключей.Я хочу получить последние записи каждого уникального ключа со значением, которое имеет эта конкретная строка.То, что я пробовал:

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 в select, я должен сгруппировать его, и в этот момент он не даст мне правильный правильный терминал, но захватит неправильный.

Итак, вопрос здесь в том, как мне на самом деле заставить его взять b.terminal, принадлежащий строке, в которой я ранее использовал max (b.event_time)?

Что у меня есть:

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 голосов
/ 07 июня 2018

Вы хотите 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;

. . . - для нужных столбцов.Обратите внимание, что я также изменил псевдонимы таблиц, чтобы они стали сокращениями имен таблиц.

...