【问题标题】:SQL select DISTINCT with Order BY and Group BYSQL 使用 Order BY 和 Group BY 选择 DISTINCT
【发布时间】:2018-08-08 09:57:04
【问题描述】:

大家好,我在查询方面需要一些帮助。 通过下面的select 查询,我收到了左表的结果。(见附图)。
问题是我需要修改这个查询以获得正确的表中的结果。

SELECT DISTINCT * FROM(
SELECT 
TO_CHAR(D1111MOI__.D1111TFROM + INTERVAL '3' HOUR, 'DD.MM.YYYY HH24:MI') AS TFROM,
TO_CHAR(D1111MOI__.D1111TTILL + INTERVAL '3' HOUR, 'DD.MM.YYYY HH24:MI') AS TTILL,
D1110MOL__.D1110ORDER AS NR,
R0507UNIT_.R0507NAME_ AS NAME,
D1110MOL__.D1110POW__ AS AV

FROM D1110MOL__
INNER JOIN D1109MOH__
ON D1110MOL__.D1109ID___ = D1109MOH__.D1109ID___
AND D1110MOL__.D1110DDAYS = D1109MOH__.D1109DDAYS
INNER JOIN D1111MOI__
ON D1109MOH__.D1109ID___ = D1111MOI__.D1109ID___
AND D1109MOH__.D1109DDAYS = D1111MOI__.D1111DDAYS
INNER JOIN R0507UNIT_
ON D1110MOL__.R0507ID___ = R0507UNIT_.R0507ID___

WHERE (D1111MOI__.D1111TFROM >= TO_DATE('17.05.2017 21:00', 'dd.mm.yyyy hh24:mi')
AND (D1111MOI__.D1111TTILL  <= TO_DATE('18.05.2017 21:00', 'dd.mm.yyyy hh24:mi')))
AND D1109MOH__.D1109TYPE_ = 1
AND D1110MOL__.D1110SEL__ = 1
)
ORDER BY TFROM,NR;

【问题讨论】:

  • 提示:GROUP BYSUM()
  • 轻松为您提供帮助。创建一个最小的例子。将样本数据和预期结果作为格式化文本。
  • 我没有看到D1110MOL__D1109MOH__D1111MOI__ 等的任何定义或示例数据,只是一个查询和实际结果与预期结果的屏幕截图。也许一个更简单的例子可以说明没有 4 路连接和日期操作的问题。
  • 但关键是我无法测试您的查询来修复它,因为我没有您的表格。

标签: sql oracle plsql oracle-sqldeveloper


【解决方案1】:

尝试使用以下代码:

SELECT TFROM, TTILL, SUM(AV) as TOTAL_AV
  FROM (SELECT DISTINCT TO_CHAR (D1111MOI__.D1111TFROM + INTERVAL '3' HOUR, 'DD.MM.YYYY HH24:MI') AS TFROM,
             TO_CHAR (D1111MOI__.D1111TTILL + INTERVAL '3' HOUR, 'DD.MM.YYYY HH24:MI') AS TTILL,
             D1110MOL__.D1110ORDER AS NR,
             D1110MOL__.D1110POW__ AS AV
        FROM D1110MOL__
             INNER JOIN D1109MOH__ ON D1110MOL__.D1109ID___ = D1109MOH__.D1109ID___ AND D1110MOL__.D1110DDAYS = D1109MOH__.D1109DDAYS
             INNER JOIN D1111MOI__ ON D1109MOH__.D1109ID___ = D1111MOI__.D1109ID___ AND D1109MOH__.D1109DDAYS = D1111MOI__.D1111DDAYS
             INNER JOIN R0507UNIT_ ON D1110MOL__.R0507ID___ = R0507UNIT_.R0507ID___
       WHERE     (    D1111MOI__.D1111TFROM >= TO_DATE ('17.05.2017 21:00', 'dd.mm.yyyy hh24:mi')
                  AND (D1111MOI__.D1111TTILL <= TO_DATE ('18.05.2017 21:00', 'dd.mm.yyyy hh24:mi')))
             AND D1109MOH__.D1109TYPE_ = 1
             AND D1110MOL__.D1110SEL__ = 1)
 GROUP BY TFROM, TTILL
 ORDER BY TFROM;

【讨论】:

  • 我试过但我有not a group by expression错误
  • @BOB 试试不。我删除了 NR 的排序,它导致了错误,因为它不在 GROUP BY 中(而且不应该)
  • 谢谢你,我犯了同样的错误,我不明白为什么会出现这个错误
  • 没问题@BOB,我很高兴能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多