当我创建一个包含多个列和一个MOD的select语句时,MOD必须在GROUP BY中,但我不想:)。
SELECT LOCATION, ROUND(MIN(TEM)) TN, MOD((to_number(TO_CHAR(DATE, 'hh24'))+RANGE), 24)
FROM TABLE
WHERE TRUNC(DATE) = TRUNC(SYSDATE)
AND RANGE BETWEEN 18 AND 30
GROUP BY LOCATION, MOD((to_number(TO_CHAR(DATE, 'hh24'))+RANGE), 24)
ORDER BY LOCATION
我想通过LOCATION:LOCATION,TEM的最小值和日期。
那么您是否知道如何在GROUP BY中没有MOD的情况下进行此查询?
谢谢
答案 0 :(得分:0)
使用分析功能。
SELECT DISTINCT LOCATION, TN, my_mod
FROM
(
SELECT LOCATION, MIN(TEM)) OVER (PARTITION BY LOCATION) TN, MOD((to_number(TO_CHAR(DATE, 'hh24'))+RANGE), 24) my_mod
FROM TABLE
WHERE TRUNC(DATE) = TRUNC(SYSDATE)
AND RANGE BETWEEN 18 AND 30
)
order by location;
希望这有帮助。
答案 1 :(得分:0)
不使用group by
,而是使用row_number()
来确定TEM
的最小值,然后从那里完成查询:
SELECT LOCATION, ROUND(TEM) TN, MOD((to_number(TO_CHAR(DATE, 'hh24'))+RANGE), 24)
FROM (SELECT t.*, row_number over (partition by location order by tem) as seqnum
FROM TABLE t
WHERE TRUNC(DATE) = TRUNC(SYSDATE) AND RANGE BETWEEN 18 AND 30
) t
WHERE seqnum = 1
ORDER BY LOCATION