首页 > 解决方案 > 提取日期直接小于感兴趣日期的所有行

问题描述

我目前有一个包含以下字段的表:

姓名 日期 旗帜
约翰 5-28-10 ñ
约翰 5-28-10 ñ
约翰 5-28-10 ñ
约翰 5-29-10
瑞克 7-14-12 ñ
瑞克 9-02-13 ñ
瑞克 15 年 4 月 21 日
瑞克 17 年 6 月 21 日 ñ

我想提取第一个日期小于标志列中带有“Y”的日期的所有行。所以对于约翰,我想拉出日期为 5-28-10 的所有 3 行。但是对于 Rick,我只想拉出日期为 9-02-13 的行。

所以所需的输出看起来像:

姓名 日期 旗帜
约翰 5-28-10 ñ
约翰 5-28-10 ñ
约翰 5-28-10 ñ
瑞克 9-02-13 ñ

有什么办法可以做到这一点吗?

标签: sqlsql-server

解决方案


您可以使用:

select t.*
from t
where t.flag <> 'Y' and
      t.date < (select min(t2.date)
                from t t2
                where t2.name = t.name and t.flag = 'Y'
               );

推荐阅读