sql - 如何计算两个日期列的出现次数并仅在一张表中显示?
问题描述
我正在构建一个查询,旨在显示每月两个日期变量的出现次数。我能够组装两个单独的查询:我计算每月的出现次数和组数,但我不知道如何加入这两个查询,因为它们来自同一个表,并且仍然只显示一列的计数月。
谢谢你们的帮助,伙计们!
格式:YYYY-MM-DD
|----------------------|------------------| | 登机日期 | offboard_date | |----------------------|------------------| | 2019/01/15 | - | |----------------------|------------------| | 2019/01/25 | 2019/02/15 | |----------------------|------------------| | 2019/02/13 | 2019/02/20 | |----------------------|------------------| | 2019/02/18 | - | |----------------------|------------------| | 2019/03/09 | - | |----------------------|------------------|
我尝试过的和工作过的:
SELECT DATE_TRUNC('month', onboard_date) AS onboard_month,
COUNT(*) as onboards
FROM lukla.trn_users trn
WHERE trn.company_name = 'amaro'
GROUP BY DATE_TRUNC('month', onboard_date)
ORDER BY DATE_TRUNC('month', onboard_date)
和
SELECT DATE_TRUNC('month', offboard_date) AS onboard_month,
COUNT(*) as onboards
FROM lukla.trn_users trn
WHERE trn.company_name = 'amaro' AND offboard_date IS NOT NULL
GROUP BY DATE_TRUNC('month', offboard_date)
ORDER BY DATE_TRUNC('month', offboard_date)
我想要的结果:
|---------------|------------|------------| | 月 | 板载 | 船外 | |---------------|------------|------------| | 01 | 2 | 0 | |---------------|------------|------------| | 02 | 2 | 2 | |---------------|------------|------------| | 03 | 1 | 0 | |---------------|------------|------------|
解决方案
横向连接使这非常简单:
select date_trunc('month', v.dte) as month, sum(v.is_onboard) as onboards, sum(v.is_offboard) as offboards
from trn_users t cross join lateral
(values (t.onboard_date, (t.onboard_date is not null)::int, 0),
(t.offboard_date, 0, (t.offboard_date is not null)::int)
) v(dte, is_onboard, is_offboard)
where v.dte is not null
group by month
order by month;
这是一个 db<>fiddle。
推荐阅读
- hyperledger-fabric - 如何解决:Convector Hurley install error 写入Chaincode包内容时出错:找不到源文件
- angular - 如何使用 DatePipe 在 Angular 7 中显示日期
- php - 在 WordPress 中的自定义帖子类型上添加自定义缩略图
- twilio - 队列中呼叫的实时数据
- java - 余弦90度值
- python - Pandas - 创建一个计算记录数的对称矩阵
- python - cv2.error: OpenCV(4.0.0) C:\blah\blah\templmatch.cpp:589: 错误: (-215:Assertion failed)
- git - 添加 gitignore 后如何删除缓存/跟踪的文件?
- jboss - jboss AS 7.1 应用程序连接 IBM Filenet
- dart - 在颤振中将命令行选项传递给 dartvm