sql - 如何过滤最小日期并删除连接表中的重复日期?
问题描述
我正在尝试将三个表与父表连接起来,以获取客户 id、访问 id和访问日期的输出,如果有多个日期,则选择最旧的日期。所有四个表都包含 cust_id、visit_id 和 visit_date 变量,但 visit_id 是链接变量。我将四个表命名为 a、b、c 和 d,以简化下面的代码(a 是父表)。
我下面的当前代码让我更接近我想要的输出,但我不确定如何通过 visit_id 获得一个包含最旧日期的visit_date列,并且不确定如何删除重复项。任何帮助将不胜感激,如果我能澄清任何事情,请告诉我!
SELECT
a.cust_id,
a.visit_id,
a.visit_date,
b.visit_date,
c.visit_date,
d.visit_date
FROM a
LEFT JOIN b
ON a.visit_id = b.visit_id
LEFT JOIN c
ON a.visit_id = c.visit_id
LEFT JOIN d
ON a.visit_id = d.visit_id
WHERE a.visit_date IS NOT NULL
OR b.visit_date IS NOT NULL
OR c.visit_date IS NOT NULL
OR d.visit_date IS NOT NULL;
我当前的输出如下所示:
cust_id | 访问ID | 访问日期 | 访问日期 | 访问日期 | 访问日期 |
---|---|---|---|---|---|
001 | 001 | 2013-05-23 | |||
002 | 002 | 2013-06-03 | 2013-05-27 | ||
003 | 003 | 2013-06-05 | 2013-06-05 | 2013-06-05 | |
003 | 004 | 2013-07-09 | 2013-07-09 | 2013-07-06 |
我想要的输出如下所示:
cust_id | 访问ID | 访问日期 |
---|---|---|
001 | 001 | 2013-05-23 |
002 | 002 | 2013-05-27 |
003 | 003 | 2013-06-05 |
003 | 004 | 2013-07-06 |
解决方案
您可以使用标量LEAST
函数:
SELECT
a.cust_id,
a.visit_id,
LEAST(a.visit_date, b.visit_date, c.visit_date, d.visit_date) AS visit_date
FROM a
LEFT JOIN b
ON a.visit_id = b.visit_id
LEFT JOIN c
ON a.visit_id = c.visit_id
LEFT JOIN d
ON a.visit_id = d.visit_id
WHERE
a.visit_date IS NOT NULL OR
b.visit_date IS NOT NULL OR
c.visit_date IS NOT NULL OR
d.visit_date IS NOT NULL;
推荐阅读
- python - 乘法时的Python递归错误
- jwt - 如何从外部服务生成的传入 JWT 中提取信息?
- sql-server - SQL Server FOR XML 行合并行
- c++ - 使用来自另一个模板的参数的 Currying 模板
- r - 使用 R 连接到 Youtube Analytics API
- sql-server - SSIS 使用 SQL 表中的不同数据向不同的收件人发送电子邮件
- javascript - Redux:如何组织多个选择器?
- compiler-errors - LLVM “/manifestdependency: is not allowed in .drectve” 解决方法
- php - 对友好的 url 使用 htaccess modrewrite 会产生 404 错误
- c++ - g++ - 链接阶段(-L 标志)不起作用