如果我查询:
select max(date_created) date_created
在PL/SQL(Oracle 11g)中的日期字段上,并且有在同一日期但在不同时间创建的记录,Max()只返回该日期的最新时间。我想做的是忽略时间,并返回与最大日期匹配的所有记录,而不管它们在该列中的相关时间戳如何。这样做的最佳做法是什么?
编辑:我想做的是返回符合我的条件的最近日期的所有记录,而不管当天的时间戳如何。以下是我现在正在做的事情,它只返回最新日期和该日期的时间的记录。
SELECT r."ID",
r."DATE_CREATED"
FROM schema.survey_response r
JOIN
(SELECT S.CUSTOMERID ,
MAX (S.DATE_CREATED) date_created
FROM schema.SURVEY_RESPONSE s
WHERE S.CATEGORY IN ('Yellow', 'Blue','Green')
GROUP BY CUSTOMERID
) recs
ON R.CUSTOMERID = recs.CUSTOMERID
AND R.DATE_CREATED = recs.date_created
WHERE R.CATEGORY IN ('Yellow', 'Blue','Green')
最终编辑:通过下面的查询使其工作。
SELECT r."ID",
r."DATE_CREATED"
FROM schema.survey_response r
JOIN
(SELECT S.CUSTOMERID ,
MAX (trunc(S.DATE_CREATED)) date_created
FROM schema.SURVEY_RESPONSE s
WHERE S.CATEGORY IN ('Yellow', 'Blue','Green')
GROUP BY CUSTOMERID
) recs
ON R.CUSTOMERID = recs.CUSTOMERID
AND trunc(R.DATE_CREATED) = recs.date_created
WHERE R.CATEGORY IN ('Yellow', 'Blue','Green')
在Oracle中,您可以忽略时间来获取最新日期
SELECT max( trunc( date_created ) ) date_created
FROM your_table
您可以通过以下几种方式获取具有最新日期的所有行,忽略时间。使用分析函数(首选)
SELECT *
FROM (SELECT a.*,
rank() over (order by trunc(date_created) desc) rnk
FROM your_table a)
WHERE rnk = 1
或者更传统但效率较低的
SELECT *
FROM your_table
WHERE trunc(date_created) = (SELECT max( trunc(date_created) )
FROM your_table)