mysql - 计算两个日期之间的特定日期计数
问题描述
我需要一个 Amazon Redshift SQL 查询来计算两个日期之间的特定天数。日期格式 - YYYY-MM-DD 例如 - 开始日期 = 2019-06-14,结束日期 = 2019-10-09,日期 - 每个月的第二天
现在,我想计算 2019 年 6 月 14 日和 2019 年 10 月 9 日之间的第 2 天下降次数
因此,上述示例的实际结果应该是 4。因为 2nd-day 的 4 次将落在 2019-06-14 和 2019-10-09 之间。
我尝试了redshift的DATE_DIFF函数和months_between函数。但未能建立逻辑。由于无法理解数学或方程式应该是什么。
解决方案
对我来说,好像您想从日历表中进行选择。这样你就可以解决你的问题。您会注意到该查询看起来有点 hacky,因为 Redshift 不支持任何生成序列的函数,这让您必须自己创建序列表(请参阅seq_10
和seq_1000
)。一旦你有了一个序列,你就可以轻松地创建一个calendar
包含你需要的所有信息的序列(例如day_of_month
)。
这是回答您问题的查询:
WITH seq_10 as (
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1
), seq_1000 as (
select
row_number() over () - 1 as n
from
seq_10 a cross join
seq_10 b cross join
seq_10 c
), calendar as (
select '2018-01-01'::date + n as date,
extract(day from date) as day_of_month,
extract(dow from date) as day_of_week
from seq_1000
)
select count(*) from calendar
where day_of_month = 2
and date between '2019-06-14' and '2019-10-09'
推荐阅读
- vuetify.js - 针对特定屏幕尺寸隐藏的 Vuetify Vspacer
- python - Google Speech to text Error Raspberry Pi - “模块对象没有属性 RecognitionAudio”
- python - 构造:Python - 不换行打印
- firebase - Cloud_firestore 迁移问题:状态不佳:DocumentSnapshotPlatform 中不存在字段
- angular - ngTemplateOutlet :事件处理程序失败
- reactjs - Next.js + eslint:无法解析模块“fs/promises”的路径
- reactjs - 在 React 中将 div 覆盖在图像上
- python - 如何在数据框中的第一个特定单词之后找到第二个特定单词
- swiftui - 导航栏中的 SwiftUI 元素不响应状态
- visual-studio-code - 如何在我自己的vscode扩展中以编程方式获取文档中carret位置的类/方法/方法参数信息