tsql proc логическая справка - PullRequest
0 голосов
/ 19 апреля 2010

Я слаб в SQL и мне нужна помощь в проработке логики с моим процессом.

Три части: процедура хранения, таблица1, таблица2

В таблице 1 хранятся самые последние данные для конкретных идентификаторов

Customer_id status_dte  status_cde    app_dte
001         2010-04-19  Y             2010-04-19

В таблице 2 хранится история данных для определенных идентификаторов клиентов: Например:

Log_id  customer_Id status_dte  status_cde
01     001         2010-04-20   N
02      001         2010-04-19   Y      
03      001         2010-04-19   N
04      001         2010-04-19   Y

Сохраненная процедура в настоящее время выдает ошибку, если дата состояния из table1 меньше, чем app_date в table1.

If @status_dte < app_date
    Error

Примечание: @status_dte - это переменная, сохраненная как status_dte из таблицы1

Однако, я хочу, чтобы он выдавал ошибку, когда EARLIEST status_dte из Таблица 2 с status_cde 'Y' меньше, чем столбец app_dte в Таблица 1.

Имейте в виду, что эта самая ранняя дата нигде не хранится, история изменений данных на клиента. Другой клиент может иметь следующее история.

Log_id  customer_Id status_dte  status_cde
01     002         2010-04-20  N
02      002         2010-04-18  N       
03      002         2010-04-19  Y
04      002         2010-04-19  Y

Есть идеи, как мне к этому подойти?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2010

Если вместо одного клиента вы хотите получить список клиентов с их самой ранней датой статуса до app_date, вы можете сделать что-то вроде:

;With 
    CustomerStatusDates As
    (
        Select T2.customer_id, Min(T2.status_dte) As MinDate
        From Table2 As T2
        Where status_cte = 'Y'
        Group By T2.customer_id
    )
Select ....
From Table1 As T1
    Join CustomerStatusDates As T2
        On T2.Customer_Id = T1.Customer_Id
Where T2.MinDate < T1.app_dte
0 голосов
/ 19 апреля 2010

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

IF EXISTS (SELECT *
    FROM
      mytable M
      JOIN
      HistoryTable H ON M.customer_Id = H.customer_Id
    WHERE
      H.status_cde = 'Y'
    GROUP BY
      H.customer_Id, M.app_dte
    HAVING
     MIN(H.status_dte) < M.app_dte)
  ...error...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...