我们有一张桌子 - 称之为table1_summary T1
。它是一个历史表,包含每个快照月的所有数据
它具有可追溯到2008年的每个快照月的每条记录。因此,如果记录是在快照月2013-01-01
中创建的,则每个月的记录将在创建日期到当前的每个快照月中多次出现在此表中日期。
说这就是我的桌子排队的方式我正在使用。如何将我的查询添加到我将$0.00
的此记录为Record_Balance
的第一个snapshot_month中?因此,对于此示例,2011-05-31
将是我想要返回的记录。
snapshot_date---| Record_Number---|Record_Balance
2011-02-28 ------| 12345 ----------------| 276.00
2011-03-31 ------| 12345 ----------------| 276.00
2011-04-30 ------| 12345 ----------------| 175.00
2011-05-31 ------| 12345 ----------------| 0.00
2011-06-30 ------| 12345 ----------------| 0.00
2011-07-31 ------| 12345 ----------------| 0.00
2011-08-31 ------| 12345 ----------------| 0.00
这是我的示例查询
Select T1.snapshot_date
,T1.Record_number
,T1.Record_balance
from table1_summary t1
where t1.record_number = '12345'
我想为所有记录执行此操作而不是限制它
答案 0 :(得分:0)
假设您想要每个记录编号的第一个零余额:
SELECT
T1.Record_number,
MIN(T1.snapshot_date) MinDate
FROM table1_summary t1
WHERE T1.Record_balance = 0
GROUP BY T1.Record_number
答案 1 :(得分:0)
你可以做很多事。其中一种方法是使用CTE按日期排序:
DECLARE @table1_summary TABLE
(
snapshot_date DATE ,
Record_number INT ,
Record_balance MONEY
)
INSERT INTO @table1_summary
VALUES ( '2011-02-28', 12345, 276.00 ),
( '2011-03-31', 12345, 276.00 ),
( '2011-04-30', 12345, 175.00 ),
( '2011-05-31', 12345, 0.00 ),
( '2011-06-30', 12345, 0.00 ),
( '2011-07-31', 12345, 0.00 ),
( '2011-08-31', 12345, 0.00 ),
( '2011-02-28', 12346, 1.00 ),
( '2011-08-31', 12346, 0.00 ),
( '2011-09-30', 12346, 0.00 );
WITH cte
AS ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY Record_number ORDER BY ( snapshot_date ) ) AS RN
FROM @table1_summary
WHERE Record_balance = 0
)
SELECT T1.snapshot_date ,
T1.Record_number ,
T1.Record_balance
FROM cte t1
WHERE --t1.record_number = 12345 AND
t1.RN = 1
输出:
snapshot_date Record_number Record_balance
2011-05-31 12345 0.00
2011-08-31 12346 0.00
如果您想按特定记录编号进行过滤,请取消注释--t1.record_number = 12345 AND
。