如何查看列中的值是否在多个日期发生变化
How to see if values in a column changed across multiple dates
下面有一个 table,我需要查看给定期间内任何贷款编号的利率是否发生变化。下面只是示例数据,我需要在 200 万行中找到此信息。如何才能做到这一点?
示例数据
+------------+-------------+---------------+
| DATE | LOAN_NUMBER | INTEREST_RATE |
+------------+-------------+---------------+
| 04/01/2010 | 1111122 | 0.375 |
| 05/15/2011 | 1111122 | 0.375 |
| 06/01/2012 | 1111122 | 0.300 |
| 07/08/2010 | 1111133 | 0.400 |
| 07/01/2011 | 1111133 | 0.450 |
+------------+-------------+---------------+
我尝试了以下操作:
Select A.Date, A.Loan_Number, A.Interest_Rate
FROM TABLEX A
INNER JOIN TABLEX B ON A.Loan_Number = B.Loan_Number
AND A.Date < B.Date
但这并没有得到我需要的结果。
感谢任何帮助!
Select A.Date, A.Loan_Number, A.Interest_Rate
, B.Date, B.Interest_Rate
FROM TABLEX A
INNER JOIN TABLEX B
ON A.Loan_Number = B.Loan_Number
AND DateDiff(dd, A.Date, B.Date) =< 10
AND DateDiff(dd, A.Date, B.Date) > 0
AND A.INTEREST_RATE <> B.INTEREST_RATE
你可以使用 row_number 来模仿下一个函数,比如
select b.*
from (
Select [Date], Loan_Number, Interest_Rate,row_number() over(partition by Loan_Number order by [Date] desc, Interest_Rate desc) rowid
FROM TABLEX) A
join (
Select [Date], Loan_Number, Interest_Rate,row_number() over( partition by Loan_Number order by [Date] desc, Interest_Rate desc) rowid
FROM TABLEX) B
on a.rowid = b.rowid -1
and a.Loan_Number = b.Loan_Number
where a.Interest_Rate <> b.Interest_Rate
Interest_Rate
已更改意味着 MIN
值与 MAX
值不同。
查询将 return 列出 Interest_Rate
在给定时间段内(从 @StartDate
到 @EndDate
发生变化的所有 Loan_Numbers
独家)。
SELECT A.Loan_Number
FROM TABLEX A
WHERE
A.Date >= @StartDate
AND A.Date < @EndDate
GROUP BY A.Loan_Number
HAVING MIN(A.Interest_Rate) <> MAX(A.Interest_Rate)
;
下面有一个 table,我需要查看给定期间内任何贷款编号的利率是否发生变化。下面只是示例数据,我需要在 200 万行中找到此信息。如何才能做到这一点?
示例数据
+------------+-------------+---------------+
| DATE | LOAN_NUMBER | INTEREST_RATE |
+------------+-------------+---------------+
| 04/01/2010 | 1111122 | 0.375 |
| 05/15/2011 | 1111122 | 0.375 |
| 06/01/2012 | 1111122 | 0.300 |
| 07/08/2010 | 1111133 | 0.400 |
| 07/01/2011 | 1111133 | 0.450 |
+------------+-------------+---------------+
我尝试了以下操作:
Select A.Date, A.Loan_Number, A.Interest_Rate
FROM TABLEX A
INNER JOIN TABLEX B ON A.Loan_Number = B.Loan_Number
AND A.Date < B.Date
但这并没有得到我需要的结果。
感谢任何帮助!
Select A.Date, A.Loan_Number, A.Interest_Rate
, B.Date, B.Interest_Rate
FROM TABLEX A
INNER JOIN TABLEX B
ON A.Loan_Number = B.Loan_Number
AND DateDiff(dd, A.Date, B.Date) =< 10
AND DateDiff(dd, A.Date, B.Date) > 0
AND A.INTEREST_RATE <> B.INTEREST_RATE
你可以使用 row_number 来模仿下一个函数,比如
select b.*
from (
Select [Date], Loan_Number, Interest_Rate,row_number() over(partition by Loan_Number order by [Date] desc, Interest_Rate desc) rowid
FROM TABLEX) A
join (
Select [Date], Loan_Number, Interest_Rate,row_number() over( partition by Loan_Number order by [Date] desc, Interest_Rate desc) rowid
FROM TABLEX) B
on a.rowid = b.rowid -1
and a.Loan_Number = b.Loan_Number
where a.Interest_Rate <> b.Interest_Rate
Interest_Rate
已更改意味着 MIN
值与 MAX
值不同。
查询将 return 列出 Interest_Rate
在给定时间段内(从 @StartDate
到 @EndDate
发生变化的所有 Loan_Numbers
独家)。
SELECT A.Loan_Number
FROM TABLEX A
WHERE
A.Date >= @StartDate
AND A.Date < @EndDate
GROUP BY A.Loan_Number
HAVING MIN(A.Interest_Rate) <> MAX(A.Interest_Rate)
;