我在SQL方面很弱,需要一些帮助来处理我的proc。
三件:存储过程,table1,table2
表1列出了特定ID的最新数据
Customer_id status_dte status_cde app_dte
001 2010-04-19 Y 2010-04-19
表2列出了特定客户ID的数据历史记录: 例如:
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
如果状态为日期,则存储的proecure当前会抛出错误 table1是<比表1中的app_date。
If @status_dte < app_date
Error
注意:@status_dte是一个存储为table1
的status_dte的变量但是,我希望它在EARLIEST status_dte来自时抛出错误 status_cde为'Y'的表2小于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
关于如何处理这个问题的任何想法?
答案 0 :(得分:0)
您可以按照每个客户一次性测试,找到最早的日期小于使用此构造的appdate的位置
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...
答案 1 :(得分:0)
如果您想要一个客户列表,而不是单个客户,而是在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