对于查询:
SELECT MAX(LOG_CREATION_DATE),COL_A, COL_B
FROM IMPORT_LOG
GROUP BY TO_CHAR(LOG_CREATION_DATE, 'MM-DD-YYYY'),
COL_A,
COL_B
ORDER BY MAX(LOG_CREATION_DATE) DESC
;
记录按需降序排列:
09-FEB-12 12.59.18.000000000 PM
09-FEB-12 12.41.42.000000000 PM
09-FEB-12 11.26.15.000000000 AM
09-FEB-12 11.26.00.000000000 AM
01-FEB-12 01.27.11.000000000 PM
01-FEB-12 01.25.18.000000000 PM
01-FEB-12 01.25.17.000000000 PM
01-FEB-12 01.24.36.000000000 PM
25-JAN-12 02.39.11.000000000 PM
25-JAN-12 02.32.05.000000000 PM
25-JAN-12 02.31.37.000000000 PM
25-JAN-12 02.31.34.000000000 PM
但是当我更改查询以格式化相同的时间戳列时,顺序完全变为:
02-09-2012 12:02:18
02-09-2012 12:02:42
02-09-2012 11:02:15
02-09-2012 11:02:00
02-01-2012 01:02:11
02-01-2012 01:02:18
02-01-2012 01:02:17
02-01-2012 01:02:36
01-25-2012 02:01:11
01-25-2012 02:01:05
01-25-2012 02:01:37
01-25-2012 02:01:34
更新后的查询
SELECT TO_CHAR(MAX(LOG_CREATION_DATE), 'MM-DD-YYYY HH:MM:SS'),COL_A, COL_B
FROM IMPORT_LOG
GROUP BY TO_CHAR(LOG_CREATION_DATE, 'MM-DD-YYYY'),
COL_A,
COL_B
ORDER BY MAX(LOG_CREATION_DATE) DESC
;
为什么输出会改变?
答案 0 :(得分:4)
结果的排序没有改变;如果你看一下你的结果,你会注意到日期/秒组合没有变化。这主要是因为在ORDER BY
语句中,您按LOG_CREATION_DATE
本身排序,而不是修改后的表示。
您看到的错误是因为您告诉格式化字符串您想要 MONTH 两次 - MM
月,并且不依赖于上下文(使用MI
分钟 - 对不起,我不使用Oracle,所以我花了一秒钟来抓住这个。)
这是更正后的陈述 - 这会产生你想要的吗?另外,我不建议按字符表示进行分组 - 改为使用TRUNC()
。
SELECT TO_CHAR(MAX(log_creation_date), 'MM-DD-YYYY HH:MI:SS'), COL_A, COL_B
FROM Import_Log
GROUP BY TRUNC(log_creation_date), COL_A, COL_B
ORDER BY MAX(log_creation_date) DESC
答案 1 :(得分:2)
您的日期格式掩码错误,如果您应该HH:MM:SS
,则时间部分为HH:MI:SS
。或者更好,HH24:MI:SS
。
答案 2 :(得分:1)
您通过12H日历中日期的字符串表示进行排序。您的TO_CHAR也错误地使用了两次MM。
请改为尝试:
SELECT TO_CHAR(MAX (LOG_CREATION_DATE) , 'MM-DD-YYYY HH:MI:SS') AS CUSTOM_LOG_CREATION_DATE,
USER,
LOCATION,
SUM(FILE_NAME) AS SUM_IMPORT
FROM MYTABLE
GROUP BY TO_CHAR(LOG_CREATION_DATE, 'MM-DD-YYYY'),
USER,
LOCATION
ORDER BY MAX (LOG_CREATION_DATE) DESC