【问题标题】:Oracle query group byOracle 查询分组依据
【发布时间】:2012-09-19 00:04:26
【问题描述】:

我需要在最大日期之前返回 1 行,其中包含一些值的总和。但这2行是由不同的人更新的,但只需要显示最新更新的人ID。

我的查询是:

select v.code, sum(v.a_lines), sum(v.b_lines),
v.updated_by, f.period, max(v.updated_on)
from f_values v, f_file f where 
v.file_id = f.id
and v.code= '100002'
and 
to_char(f.period,'MM/DD/YYYY') = '03/31/2011'
group by v.code, v.updated_by, f.period

这将返回 2 行:

102 30  100 xxx 31-MAR-11   10-AUG-11
102 50  200 yyy 31-MAR-11   07-OCT-11

现在我们只需要返回 1 行。像这样的:

102   80   3000   yyy 31-Mar-11  07-Oct-11

我知道这可以通过从列中删除“updated_by”来实现,但我需要填充它,但它只需要是最新的 updated_by 行('yyy')。希望我的问题很清楚

如果可以,请告知。提前致谢

哈里什

【问题讨论】:

  • 这有效:MAX(updated_by) 保持(DENSE_RANK FIRST ORDER BY updated_on DESC)!但是休眠 HQL 不起作用:(。任何人请
  • Unexpected token KEEP 是错误信息

标签: oracle group-by max having


【解决方案1】:

你说你想要最新的 updated_by 行。这似乎有点太明显了,但MIN(v.updated_by) 和从GROUP BY 子句中删除v.updated_by 不会做你想要的吗?

【讨论】:

  • 感谢您的回复。我也试过了。 “updated_by”是用户 ID。所以 max 或 min 不能按预期工作。我想要最近一个的 updated_by id。希望我很清楚。
  • 在上面的例子中,我想要最近的 updated_on 日期的 updated_by id。所以在这种情况下就是'yyy'
  • 使用 MAX(updated_by) KEEP (DENSE_RANK FIRST ORDER BY updated_on DESC) 让它工作! :)
【解决方案2】:

使用它来工作

MAX(updated_by) KEEP (DENSE_RANK FIRST ORDER BY updated_on DESC)

但是这个查询在 HQL 上不起作用,所以不得不改成 SQL 查询。如果有人可以在 HQL 等效方面提供帮助,那就太棒了。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2021-11-04
    • 2011-10-14
    相关资源
    最近更新 更多