【发布时间】:2021-04-09 23:10:10
【问题描述】:
在运行SELECT DISTINCT 后,我仍然在我的结果中看到重复项,尽管我使用了所有适当的技术来确保重复的行确实是重复的(将修剪应用于所有字段,将日期字段格式化为仅日期等)。我什至尝试过GROUP BY,但运行它后,仍然出现重复项。有没有人知道世界上正在发生什么,以及我能做些什么?
SELECT DISTINCT
ID, Address_Line_1, Address_Line_2, City, State, Zip,
to_date(START_DATE, 'DD-MON-YYYY') as START_DATE,
to_date(END_DATE, 'DD-MON-YYYY') as END_DATE
FROM
AddressHistory
ORDER BY
ID, START_DATE DESC;
【问题讨论】:
-
您是否尝试了我昨天发布相同问题时的建议?在这个问题中,我没有看到 TRUNC 应用于您查询中的日期。从此,假设“日期”确实是数据类型,为什么要对它们应用 TO_DATE? TO_DATE 应应用于 字符串,以将它们转换为日期。
-
提供测试用例:CREATE TABLE 和 INSERT INTO 几个示例行(“E 3RD ST”就足够了),以便我们了解您真正拥有什么以及您的查询返回什么以及原因。跨度>
-
start_date 和 end_date 列的数据类型是什么?如果它们是 DATE 类型,则使用 TRUNC - 切勿对已经是 DATE 的值使用 TO_DATE。如果它们是字符串数据类型,那么您可能有“01-JAN-2020”和“01-JAN-2020”之类的值,以及另一个示例为什么永远不应将日期/时间值存储为字符串。
-
如果您
select dump(column_name) from table,您将确切地看到每列/表达式在二进制输出中的计算结果以及差异所在。如果没有可重现的示例,我的猜测是其中一个日期与您预期的日期不同(即一个日期是 2013 年,另一个是 1913 年或 0013 年)。但这只是猜测,没有更多信息。 -
@mathguy,当我执行 Trunc(Start_Date) 时,出现以下错误。这是因为某些记录中有空值,所以遇到空值时会抛出错误。这就是我尝试其他方法的原因,但我明白你在说什么 ORA-01722:无效号码 01722。00000 - “无效号码” *原因:指定的号码无效。 *操作:指定一个有效的数字。
标签: oracle select duplicates distinct