Как напечатать последнюю, но одну строку в T-SQL? - PullRequest
2 голосов
/ 20 октября 2011
-----------------------------------------------
Value     ISRepeat    Changed
------------------------------------------------
666-66-8888 NULL    2011-10-19 15:28:47.310
555-55-6666 NULL    2011-10-19 15:27:26.413
444-44-5555 NULL    2011-10-19 15:25:02.660
333-33-4444 NULL    2011-10-19 15:23:57.120
222-22-3333 NULL    2011-10-19 15:13:57.903
222-22-2222 NULL    2011-10-19 15:13:03.517
100-10-2222 NULL    2011-10-19 15:07:52.010
100-10-1111 NULL    2011-10-19 15:06:59.690

У меня есть такой стол. Я хочу напечатать значение

555-55-6666 NULL    2011-10-19 15:27:26.413

, которая является последней, но одной строкой в ​​таблице на основе времени (измененный столбец) .... условие - это время, предшествующее последнему значению Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Самое последнее время найдено:

SELECT MAX(Changed) AS most_recent FROM AnonymousTable

Вы хотите, чтобы строка с максимальным временем меньше, чем это:

SELECT MAX(Changed) AS second_latest
  FROM AnonymousTable
 WHERE Changed < (SELECT MAX(Changed) AS most_recent FROM AnonymousTable)

Итак, вы выбираете соответствующую строку:

SELECT *
  FROM AnonymousTable
 WHERE Changed =
       (SELECT MAX(Changed) AS second_latest
          FROM AnonymousTable
         WHERE Changed < (SELECT MAX(Changed) AS most_recent FROM AnonymousTable)
       )

Может быть более аккуратный способ сделать это, и этот метод не обобщается на третье или четвертое последнее значение Вполне возможно, что функциональность OLAP может помочь.

1 голос
/ 20 октября 2011

Попробуйте это:

select top 1 *
from YourTable
where Changed not in
(
    select max(Changed)
    from YourTable
)
order by Changed desc

Или:

select *
from
(
    select ROW_NUMBER() over (order by Changed desc) as row_num,
        *
    from YourTable
) a
where row_num = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...