首页 > 解决方案 > 不能在 PostgreSQL 中按日期排序

问题描述

这是一个请求,它获取所有那些确认战斗次数超过 4 的战斗事件,它也做了一些特定的时间选择,但没关系(看起来很奇怪,因为这个请求是由我正在使用的 ORM 执行的,所以它只是在它们应该在的地方放入一些布尔值)。

SELECT
    "fightEventId"
FROM location_time_slot AS lts
WHERE "fightId" IN (
    SELECT
        f.id
    FROM fights AS f
    WHERE f.status = 'CONFIRMED'
) AND "fightEventId" IN (
    SELECT
        fe.id
    FROM fight_events AS fe
    WHERE true AND (
        NOW() at time zone 'utc' >= fe.from AND NOW() at time zone 'utc' <= fe.to
    ) OR true AND NOW() at time zone 'utc' <= fe.to
      OR false AND NOW() at time zone 'utc' > fe.to
)
GROUP BY "fightEventId"
HAVING 
    COUNT("fightId") > 4
LIMIT 1
OFFSET 0;

我还想通过location_time_slot表中存在的名为“from_date”的参数对该输出进行排序(排序)。

如果我这样添加:

SELECT
    "fightEventId"
FROM location_time_slot AS lts
WHERE "fightId" IN (
    SELECT
        f.id
    FROM fights AS f
    WHERE f.status = 'CONFIRMED'
) AND "fightEventId" IN (
    SELECT
        fe.id
    FROM fight_events AS fe
    WHERE true AND (
        NOW() at time zone 'utc' >= fe.from AND NOW() at time zone 'utc' <= fe.to
    ) OR true AND NOW() at time zone 'utc' <= fe.to
      OR false AND NOW() at time zone 'utc' > fe.to
)
GROUP BY "fightEventId", from_date 
HAVING 
    COUNT("fightId") > 4
ORDER BY from_date DESC 
LIMIT 1
OFFSET 0;

查询执行,但它什么都不返回,只返回一个 id。

好像我以错误的方式分组?

标签: postgresql

解决方案


如果我要猜测的话,我会说,一旦您添加分组 by from_date,那么您就没有任何符合您count() > 4条件的组。

要对此进行测试,请选择所有列:

select
    "fightEventId"
, from_date
, count("fightEventId")
from ....

然后删除您的HAVING子句以查看在应用该子句之前得到什么结果HAVING


推荐阅读