я таблица тат выглядит следующим образом:SQL Server Выберите самые последние записи только
Table1
ID Date TermDate Cancel
1 20140101 99999999 20140102
1 20140101 20130102 20140102
2 20140108 20130102 20140102
2 20140101 99999999 20140102
3 20140101 99999999 20140102
3 20140101 99999999 20140102
3 20140101 99999999 20140709
То, что я хочу сделать, это, в группе по каждому ID и выбрать только самые последние запись. Сначала мне нужно проверить столбец Date, оттуда, если запись более поздняя, тогда мне не нужно проверять другие столбцы, в этом случае это ID # 2.
Если столбец Дата одно и то же для той же ID, то я хочу, чтобы сравнить столбец Отменить, в зависимости от того является самым последним, то, что запись должна отображаться только в данном случае это ID 3.
Если оба столбца «Дата» и «Отмена» совпадают, тогда мне нужно сравнить столбец «TermDate», и самое последнее должно отображаться, в этом случае это ID # 1. Все столбцы - это тип int.
В основном результат должен быть:
ID Date TermDate Cancel
1 20140101 99999999 20140102
2 20140108 20130102 20140102
3 20140101 99999999 20140709
Я не лучший человеком, с самим собой объединением таблиц и действительно не знает, как начать работу с этим ... то, что я в настоящее время сделать это: скопировать таблицу в Excel файл, а затем выполнить работу вручную ... Я имею в виде использовать саз, но на самом деле не знаю, как преобразовать свою логику SQL правильного кода, вот мой pseducode:
SELECT (CASE WHEN Date > DATE THEN SELECT the greater Date
CASE WHEN Date = Date THEN SELECT the grater Cancel
ELSE WHEN Date = Date AND Cancel = Cancel THEN SELECT the grater TermDate END)
FROM Table1
GROUP BY ID
Я не» t даже знаю, как сделать таблицу похожей на приведенную выше с аргументом case ,
Пожалуйста, дайте мне знать, что является лучшим способом сделать это ... Я искал в Интернете без помощи.
Я никогда бы не догадался с dense_rank(), я обязательно попробую ваше решение и дам вам знать результат. Большое вам спасибо за ваше время. – user3221917
Один вопрос, работает ли dense_rank только с varchar? Поскольку мои поля все int, означает ли это, что мне нужно отправить их в varchar? Еще раз спасибо. – user3221917
Нет, он работает со всеми типами данных. Я обновил свой Fiddle - теперь у него есть новая ссылка в ответе. – Szymon