sql - SQL 中有没有一种方法可以选择表中所有可用天数有 30 天的差异跳跃?
问题描述
我需要选择所有日期,从当前日期开始,过去之间有 30 天的跳跃。例如,今天是 10 月 18 日,所以我需要得到 9 月 18 日、8 月 19 日、7 月 20 日。
我不能简单地写函数 current_date - 30, current_date - 60, current_date - 90 因为数据的开头很远。
解决方案
如果您使用的是 Postgres,这很容易使用generate_series()
select d::date as "date"
from generate_series(current_date,
current_date - interval '1 year',
interval '-1 month') as t(d)
从今天开始返回“过去 12 个月”。
如果今天是 2019-10-18,则返回:
date
----------
2019-10-18
2019-09-18
2019-08-18
2019-07-18
2019-06-18
2019-05-18
2019-04-18
2019-03-18
2019-02-18
2019-01-18
2018-12-18
2018-11-18
2018-10-18
如果您想要 30 天的间隔(而不是 1 个月),请使用:
select d::date as date
from generate_series(current_date,
current_date - interval '1 year',
interval '-30 day') as t(d)
推荐阅读
- python - 设置网箱,AttributeError:模块“秘密”没有属性“选择”
- go - 为什么 p 不满足 c 的接口(第 106 行)?
- html - 在 2 个不同的 HTML 页面中预加载相同的资源
- python - Numpy - 在 ND 数组中的子数组上应用函数
- php - 如何使 Phonegap 连接到本地主机
- c# - 如何在 selenium c# 中验证下拉列表中的所有值
- atom-editor - Platformio-IDE-Terminal 无法运行 conda,但普通终端可以
- c++ - c++ 多运算符重载
- python-3.x - 使用 Python3.7 在 Google AppEngine 上尝试使用没有已知父包的相对导入
- ios - 当CollectionView只有一项时如何使垂直uiCollectionViewCell左侧