假设我有一个如下所示的表:

Account Sale Date
A $5 2023-Jan-01
A $8 2023-Feb-15
B $2 2023-Mar-03
A $7 2023-Apr-10
A $9 2024-Jan-01

如果用户 Select 的日期范围是2023-Apr-01到2023-Apr-30,我希望该表筛选到以下内容:

Account Sale Date
A $5 2023-Jan-01
A $8 2023-Feb-15
A $7 2023-Apr-10

其中,我不仅可以看到指定日期范围内的帐户,还可以看到该帐户在指定日期范围之前的所有以前的销售.简单地做SELECT * WHERE Date < 2023-Apr-30就会返回:

Account Sale Date
A $5 2023-Jan-01
A $8 2023-Feb-15
B $2 2023-Mar-03
A $7 2023-Apr-10

这不是我们想要的结果.我最初做的分区类似于MAX(Date) OVER (PARTITION BY Account ORDER BY Date) AS Max_Date:

Account Sale Date Max_Date
A $5 2023-Jan-01 2024-Jan-01
A $8 2023-Feb-15 2024-Jan-01
B $2 2023-Mar-03 2023-Mar-03
A $7 2023-Apr-10 2024-Jan-01
A $9 2024-Jan-01 2024-Jan-01

如果A的最大销售日期是2023年4月30日,这将是可行的,但由于现在是2024年1月1日,结果将是一个空表.有什么主意吗?

推荐答案

您似乎想要一个带有相关子查询的EXISTS:

SELECT YT.Account,
       YT.Sale,
       YT.Date
FROM dbo.YourTable YT
WHERE EXISTS (SELECT 1
              FROM dbo.YourTable E
              WHERE E.Account = YT.Account
                AND E.Date >= @StartDate
                AND E.Date <= @EndDate); --If date is actually a date and time value you will want:
                                         --E.Date < DATEADD(DAY, 1, @EndDate)
             

Sql相关问答推荐

对于表A中的每一行,更新表B中与金额有关的行

LAG函数通过丢弃空值返回前一行

通过 Select 值的顺序进行排序ClickHouse

不可能在SQL MERGE子句中引发异常

删除MariaDB数据库中的JSON数据

如何使用WSO2将空值传递给我的SQL Server存储过程?

如何在presto/SQL中使用两个数组列创建(分解)单独的行

使用Kotlin Exposed SQL DSL Select 多个值并排序

不存在记录的国外关键点

同时插入和更新记录

如何在MS Access中基于另外两个表自动填充一个表中的字段?

递归 CTE 附加为行

在where语句中使用CTE非常缓慢

BigQuery导航函数计算ID

IN子句使用的表值用户定义函数参数

将表格和字符串连接以 for each 记录生成订单项目

使用in和and运算符过滤记录的条件

SQL Select 最大并获取列名

BigQuery - 将 TIMESTAMP 转换为 HH:MM:SS,然后识别 TIME_DIFF

在 Snowflake SQL 中计算通货inflating 率