我有一个数据库表如下:
id | 课程开始 | 课程结束 | instructor_id | student_id |
---|---|---|---|---|
1 | 2023-06-01 04:00:00.000000 | 2023-06-01 06:00:00.000000 | 3 | 4 |
2 | 2023-03-18 11:00:00.000000 | 2023-03-18 12:30:00.000000 | 3 | 4 |
... | ||||
... |
我想获取未来的前 7 天,那里有为特定用户安排的课程,而不是简单地将 7 天添加到当前日期。这意味着如果在接下来的 7 天内没有为用户安排某一天的课程,那一天不应包含在结果集中,但应该进一步查看。
一般来说,一个用户一天有多个课程计划,所以我想获取所有这些天的课程。
现在我正在将 Java 与 Spring 一起使用(使用 PostgreSQL 数据库,但如果可以有所不同,我愿意切换)并且我正在尝试使用
@Query
. 自己编写查询
有办法做到这一点吗?
我尝试使用 Spring JPA 的内置功能来让它工作,但无济于事。 之后,我四处搜索并尝试使用
GROUP BY
和 LIMIT
子句编写自己的查询,但这并没有给我想要的结果。
它无法让它“看到”过去的 7 天,即使它们是空的。
我想获取未来的前 7 天,那里有为特定用户安排的课程
一种方法使用
dense_rank()
:
select *
from (
select t.*,
dense_rank() over(partition by student_id order by lesson_start::date) rn
from mytable t
where lesson_start >= current_date + interval '1' day
) t
where rn <= 7
order by student_id, lesson_start
我们的想法是为每个未来的学生课程分配一个等级,该等级仅在日期变化时增加。您可以先运行子查询以显示逻辑。
这可以同时为多个用户工作,但是您可以在子查询中添加一个
where
子句以根据需要过滤特定的 id(在这种情况下,partition by
子句就变得不必要了)。