如何使用 SQL 查询为用户获取前 7 天的预定课程?

问题描述 投票:0回答:1

我有一个数据库表如下:

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 天,即使它们是空的。

java sql postgresql performance postgresql-10
1个回答
0
投票

我想获取未来的前 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
子句就变得不必要了)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.