Могу ли я выбрать данные данной строки и столбца при выполнении оператора SQL - PullRequest
0 голосов
/ 21 июля 2011

Чтобы уточнить заголовок, в операторе select в предложении where мне нужно проверить таблицу, в которой я делаю, используя другой выбор.В этом втором выборе, я должен найти все дополнительные идентификаторы.Вот что я разработал до сих пор

Declare @id INT

--inserting values in temp table
SELECT
   rn = ROW_NUMBER() OVER (ORDER BY adt_trl_dt_tm),
   *
INTO #Temp
FROM dbo.EVNT_HSTRY
ORDER BY adt_trl_dt_tm DESC 

--Searching for items that are deleted and have not been restored
SELECT *
FROM dbo.EVNT_HSTRY hstry
WHERE evnt_hstry_cd LIKE '3' and
adt_trl_dt_tm   > (SELECT adt_trl_dt_tm FROM dbo.EVNT_HSTRY WHERE evnt_id = evnt_id

DROP TABLE #Temp

Чтобы пояснить код, evnt_id - это внешний ключ.Первичный ключ - evnt_Hstry_id.evnt_hstry_cd 3 означает удаленный.Я пытаюсь выяснить, является ли поле adt_trl_dt_tm (последняя измененная дата) считываемой строки самым последним, сравнив его со всеми полями adt_trl_dt_tm, которые имеют одинаковый evnt_id.

Таблица, в которой я делаю выбор, является таблицей, в которой мы храним историю событий.Именно здесь мы говорим, когда событие было добавлено, изменено, удалено и / или восстановлено.

К сожалению, я не могу сделать это в своем приложении, поскольку этот оператор выполняется в SSIS.

В целом, мне нужно сравнить adt_trl_dt_tm с другими adt_trl_dt_tm, которые имеют тот же evnt_id, и выбрать самый последний.

Ответы [ 2 ]

0 голосов
/ 21 июля 2011
SELECT *
FROM dbo.EVNT_HSTRY hstry
WHERE evnt_hstry_cd = '3' and
adt_trl_dt_tm   = (
                    SELECT max(adt_trl_dt_tm) FROM dbo.EVNT_HSTRY WHERE evnt_id = hstry.evnt_id
              ) 

приведет к чтению строки, если код 3 является самой последней записью в hstry, и не будет строки, если есть более поздняя строка, не имеющая кода 3

Измените LIKE в =, если она соответствуетточно

0 голосов
/ 21 июля 2011

Можете ли вы проверить это с вашими данными?

SELECT *
FROM dbo.EVNT_HSTRY hstry
WHERE evnt_hstry_cd LIKE '3' and
not exists (select 1 from EVNT_HSTRY WHERE hstry.evnt_id = evnt_id
AND Hstry.adt_trl_dt_tm > adt_trl_dt_tm)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...