gpt4 book ai didi

java - SQL从GROUP BY hibernate中删除算术

转载 作者:行者123 更新时间:2023-12-01 13:59:15 25 4
gpt4 key购买 nike

我目前有一个在 SQL 中运行良好的查询,但我需要它在 Hibernate 中运行。它查找时间窗口内 2 个字段的记录数。然而,快速的谷歌搜索会告诉你,在 hibernate 的 GROUP BY 子句中不能有算术表达式。

我的表/SQL:

CREATE TABLE T ( 
Field_1 CHAR(4),
Field_2 CHAR(4),
Time_Stamp Date
);

--Populated

DECLARE @DATE1 DATE, @DATE2 DATE, @INTERVAL INT;
@DATE1 = TO_DATE('2013-01-01', 'yyyy-MM-dd');
@DATE2 = TO_DATE('2013-01-02', 'yyyy-MM-dd');
@INTERVAL = 15;

SELECT * FROM (
SELECT COUNT(Field_1) as field1,
COUNT(Field_2) as field2,
FLOOR( TO_NUMBER( TO_CHAR( Time_Stamp, 'hhmi' ) ) / @INTERVAL ) as timeInterval
FROM T
WHERE Time_Stamp BETWEEN @DATE1 AND @DATE2
GROUP BY FLOOR( TO_NUMBER( TO_CHAR( Time_Stamp, 'hhmi' ) ) / @INTERVAL )
) ORDER BY timeInterval ASC;

如您所见,我可以删除 ORDER BY ,以便使用子查询其中没有算术运算。在这种情况下,是否可以使用 GROUP BY 子句或其他一些解决方法来执行类似的操作?

我已经在 hibernate 中编写了查询,并且可以在两者之间进行良好的转换,我只需要查询的结构,因此算术在函数组之外,SQL 语法很好。

最佳答案

在内部查询中执行计算,然后按结果进行分组。

SELECT 
COUNT(Field_1) as field1,
COUNT(Field_2) as field2,
timeInterval
FROM (
SELECT
Field_1,
Field_2,
FLOOR( TO_NUMBER( TO_CHAR( Time_Stamp, 'hhmi' ) ) / @INTERVAL ) as timeInterval
FROM T
WHERE Time_Stamp BETWEEN @DATE1 AND @DATE2
)
GROUP BY timeInterval
ORDER BY timeInterval ASC;

关于java - SQL从GROUP BY hibernate中删除算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19431295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com