【问题标题】:Select the first duplicated element选择第一个重复的元素
【发布时间】:2019-10-15 15:50:14
【问题描述】:

我有 2 个 JAVA 课程(MODEL1 && MODEL2) 正如你在这里看到的:

MODEL1_ID   ACTN_DTE   MODEL2_ID    
---------- --------- --------------
         1 14/11/19  18         
      1000 14/11/19  4
      1001 14/11/19  19
      1002 14/11/19  4
      1003 14/11/19  4
      1004 14/11/19  18
      2000 14/11/19  5

我正在尝试使用 SQL 或 HQL 找到一种方法来从 MODEL1 中获取具有 MODEL2_ID 列表的所有元素,仅获取每个 MODEL2_ID 的第一个(最小 MODEL1_ID)MODEL1 (以防万一它是重复的)

示例: 输入:MODEL2_ID in (18,4,19,5)

MODEL1_ID   ACTN_DTE   MODEL2_ID    
---------- --------- --------------
         1 14/11/19  18         
      1000 14/11/19  4
      1001 14/11/19  19
      2000 14/11/19  5

【问题讨论】:

  • 您是否只要求 SQL 查询?因为你说的是​​ JAVA,但你会显示 SQL,这很令人困惑……
  • 是的,我要求的是 SQL 查询,如果有人想提出 HQL 查询,我会放 java 来解释更多
  • 你试过sql聚合函数吗?
  • SQL 查询作用于表而不是 Java 类。您发布的示例数据是什么?是桌子吗?
  • 第一个结果是什么意思?顺序重要吗?

标签: java sql oracle hql


【解决方案1】:

select MIN(MODEL1_ID) FROM table GROUP BY (MODEL2_ID)

【讨论】:

  • 这会产生最后一个而不是第一个元素,并且它假定 id 与创建时间相对应/总是这样排序。
  • 好吧,他可以用 MIN 代替。他只是要求一个具有 MODEL2_ID 的单数 MODEL1_ID。
  • 他用粗体字询问第一个结果。
  • 他应该向我们解释他所说的“第一个”是什么意思
【解决方案2】:

“第一”可能是指最小值actn_date,而问题只是有一个无用的数据样本(因为所有值都相同)。

如果是这样,您可以通过keep 使用聚合来获得第一个值actn_date

select model2_id, min(actn_date) as actn_date,
       min(model1_id) keep (dense_rank first order by actn_date) as model1_id
from t
group by model2_id;

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 2021-06-21
    • 2015-06-07
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2021-10-23
    相关资源
    最近更新 更多