首页 > 解决方案 > 如何在 ID 级别上动态设置 WHERE 子句限制

问题描述

我想创建一个 WHERE 子句,其中限制是动态的,具体取决于我要查找的 ID 和日期,以计算一个表中 ID 级别的行数并将其带入另一个表:

表 A 看起来像这样,有几个 ID:

ID - Create date
12221 - 12/12/2018
13331 - 12/10/2018

表 B 有以下信息和几个 ID

ID - Date
12221 - 10/10/2018
12221 - 07/06/2017
13331 - 01/20/2019

我现在想对表 2 中所有在每个 ID 的实际注册日期之前有日期的行进行计数。所以在上面的例子中它应该说:

ID - Count
12221 - 2
13331 - 0

不确定如何使用 WHERE 子句在 SQL 中执行此操作。我可能会在表 B 中将“创建日期”作为新列引入并对此进行解决(例如,如果日期小于创建日期,则为 1,如果日期大于创建日期,则为 0),然后将其放入 WHERE 子句,但由于我有大量数据,这不是理想的解决方案。

谢谢!

标签: mysqlsqlcountwhere-clause

解决方案


在日期条件下加入表格和分组:

select b.id, sum(a.createdate is not null) count
from tableb b left join tablea a
on a.id = b.id and b.date < a.createdate
group by b.id

请参阅演示
结果:

| id    | count |
| ----- | ----- |
| 12221 | 2     |
| 13331 | 0     |

推荐阅读