首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我不希望Oracle在group by中取模

我不希望Oracle在group by中取模
EN

Stack Overflow用户
提问于 2014-04-01 19:57:41
回答 2查看 305关注 0票数 0

当我使用多个列和一个MOD执行select语句时,MOD必须在GROUP BY中,但我不想这样:)。

代码语言:javascript
运行
复制
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

我想要位置:位置,瞬变电磁波的最小值和日期。

那么,你知道如何在GROUP BY中没有MOD的情况下执行这个查询吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-04-01 20:08:02

使用分析函数。

代码语言:javascript
运行
复制
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;

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2014-04-01 20:15:28

不使用group by,而是使用row_number()来确定TEM的最小值,然后从那里完成查询:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22785184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档