sql - 如何在每个日期的两个日期范围之间获取 obj
问题描述
根据我的模型事件,我在 Postgres 数据库中有这样的数据
| id | name | start_date | end_date |
1 Event1 2018-09-14 14:22:00 2018-09-15 14:22:00
2 Event2 2018-09-15 14:22:00 2018-09-15 15:22:00
我需要返回响应 group_by 日期,如果事件持续时间(end_date,start_date)花了 2 天,所以我需要在两天内返回他两次,这一切都应该按日期排序。所以响应应该是这样的:
{
"2018-09-14": [
{
"id": 1,
"name": "Event1",
"start_date": "2018-09-14 14:22:00",
"end_date": "2018-09-15 14:22:00",
}],
"2018-09-15": [{
"id": 1,
"name": "Event1",
"start_date": "2018-09-14 14:22:00",
"end_date": "2018-09-15 14:22:00",
},
{
"id": 2,
"name": "Event2",
"start_date": "2018-09-15 14:22:00",
"end_date": "2018-09-15 15:22:00",
}]
}
我怎样才能做到这一点?
解决方案
行。我为此找到了决定
1)首先我找到我需要的SQL
"SELECT DISTINCT generate_series(start_date::date, end_date::date, '1 day'::interval) AS dates, * FROM api_event ORDER BY dates")
2)其次,我在 Django ORM 上写了这个:
Event.objects.annotate(dates=Func(F('start_date'), F('end_date'), Value('1 day'), function='generate_series')).all()
所以我得到了我想要的列表:
[{
"id": 1,
"name": "Event1",
"dates": "2018-09-14",
"start_date": "2018-09-14 14:22:00",
"end_date": "2018-09-15 14:22:00"
}, {
"id": 1,
"name": "Event1",
"dates": "2018-09-15",
"start_date": "2018-09-14 14:22:00",
"end_date": "2018-09-15 14:22:00"
}, {
"id": 2,
"name": "Event2",
"dates": "2018-09-15",
"start_date": "2018-09-15 14:22:00",
"end_date": "2018-09-15 15:22:00"
}]
这个回应对我来说很好。
推荐阅读
- javascript - 尝试仅提取包含 Javascript 中特定单词的句子
- git - Git - 取消忽略位于存储库内任何位置的任何文件夹,递归地允许一切
- ios - 如何在 SceneKit 中反转动画?
- haskell - 与建模炉石的类型不匹配
- qt - 带有自定义 qvariant 对象的 Qt QDataWidgetMapper
- css - css -webkit-线性渐变动画
- javascript - 使用 API 动态字段分配表格单元格
- php - php date() 函数显示昨天的日期
- javascript - Angular / Ionic Observer 和 Observable
- excel - Measure 链接表后自行删除