【发布时间】:2019-09-09 19:13:07
【问题描述】:
我有表 time_slot,其中有 date、start_time、end_time、user 等列。
我想检索记录,例如,如果我将月份和年份与用户一起提供,那么一个月内特定用户每天可用的插槽是多少。假设用户一天可以拥有 3 个插槽,一天可以拥有 0 个插槽。
我正在使用 Postgres,我的日期列是日期,时间列是时间。我正在尝试在 Java Web 应用程序中执行此操作,并且将使用 jquery datepicker 选择日期。从我作为月、年和用户发送的位置。
表格的样本数据。
Date start-time end-time user
2019-09-01 12:21:34 13:21:34 user1
2019-09-01 14:21:34 15:21:34 user1
2019-09-01 17:21:34 17:21:34 user1
2019-09-03 12:21:34 13:21:34 user1
2019-09-03 12:21:34 13:21:34 user1
我想创建一个查询,给出用户连接开始时间和结束时间列的时间段,并按一个月的日期对结果进行分组,如下所示:
Date count_of_slots
2019-09-01 3
2019-09-02 0
2019-09-03 2
我已经尝试了以下查询。
select distinct kt.start_time,kt.end_time,DATE(kt.slot_date),count(kt.slot_date)
from time_slot as kt
WHERE date_trunc('month',to_timestamp(kt.start_time, 'yy-mm-dd HH24:MI:SS.MS') + interval '1 day')
= date_trunc('month',to_timestamp(:startdate, 'yy-mm-dd HH24:MI:SS.MS') + interval '1 day' )
group by DATE(kt.slot_date) order by cb.start_time.
在获得上述格式的预期结果后,我需要遍历日期以获取当天的时间段并存储在 json 中,如下所示。
{
"Date" : "2019-09-01",
"count" : "3",
"time-slot" : [
"12:21:34 - 13:21:34","14:21:34 - 15:21:34","17:21:34 - 17:21:34"]
}
欢迎任何建议和线索。
【问题讨论】:
-
我不清楚你在期待什么。你展示了两种不同的结果。您是否只想计算每天和用户的记录(这里的主要问题是零日)?还是您只是想获得原始表格的字符串连接版本?
-
我已经修改了我的问题,只是想计算每天和用户的记录,以及零时隙日@S-Man
-
好的,有日期范围吗?否则我猜你会得到很多零日......因为你添加了 JSON 部分?您是否也想将时隙作为 JSON 数组获取? JSON 对象中的计数在哪里?
-
你还在使用 Postgres 9.1 吗?那是no longer supported,您应该尽快计划升级。
-
一个月我需要获取日期值。我已更新我的 JSON.JSON 将采用 JAVA 而非 SQL 构建。 @S-Man
标签: postgresql