SQL - 记录满足要求的第一个日期

SQL - First Date that a record meets requirement

我们有一个 table - 称之为 table1_summary T1。这是历史 table 每个快照月的所有数据 它具有可追溯到 2008 年的每个快照月份的每条记录。因此,如果记录是在快照月份 2013-01-01 中创建的,那么每个月的每个快照月份的记录都会在此 table 中多次出现创建当前日期的日期。

说这就是我正在使用的 table 排列方式。如何将我的查询添加到我将提取第一个 snapshot_month 的位置,此记录是 [=15=].00 for Record_Balance?所以对于这个例子 2011-05-31 将是我想要 return.

的记录
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'

我想对所有记录都做,不限制

假设您想要每个记录编号的第一个零余额:

SELECT
    T1.Record_number,
    MIN(T1.snapshot_date) MinDate
FROM table1_summary t1
WHERE T1.Record_balance = 0
GROUP BY T1.Record_number

您可以通过多种方式实现。一种方法是使用 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