Datetime 防止Max函数将时间戳用作PL/SQL中日期列的条件的一部分

Datetime 防止Max函数将时间戳用作PL/SQL中日期列的条件的一部分,datetime,plsql,oracle11g,max,truncate,Datetime,Plsql,Oracle11g,Max,Truncate,如果我提出疑问: select max(date_created) date_created 在PL/SQL Oracle 11g中的datefield上,如果有在同一日期但在不同时间创建的记录,Max只返回该日期的最新时间。我想做的是忽略时间,并返回与max date匹配的所有记录,而不管它们在该列中的关联时间戳。这样做的最佳实践是什么 编辑:我想做的是返回与我的条件相匹配的最近日期的所有记录,而不管当天的时间戳如何变化。下面是我现在正在做的,它只返回最新日期和时间的记录 SELEC

如果我提出疑问:

select max(date_created) date_created
在PL/SQL Oracle 11g中的datefield上,如果有在同一日期但在不同时间创建的记录,Max只返回该日期的最新时间。我想做的是忽略时间,并返回与max date匹配的所有记录,而不管它们在该列中的关联时间戳。这样做的最佳实践是什么

编辑:我想做的是返回与我的条件相匹配的最近日期的所有记录,而不管当天的时间戳如何变化。下面是我现在正在做的,它只返回最新日期和时间的记录

    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)

哪个数据库-哪个版本…..MAX只返回单个标量值,因此忽略datetime字段的非日期部分是不相关的。考虑更新帖子来问真正的问题,比如我如何选择最近一天的所有记录?或者什么是适当的-这种知识也将导致更好的搜索,因为这个问题是很常见的。我很抱歉,更多的信息是为了。这实际上是一个PL/SQL查询,是的,我需要选择最近一天的所有记录。这是针对Oracle 11g的。添加了标记。当我将第一个块插入查询时,返回了0条记录。我甚至不敢尝试找出如何将第二个和第三个块合并到我的查询中。选择r.ID、r.DATE\u从schema.survey\u响应创建r加入选择S.CUSTOMERID、MAX S.DATE\u创建日期\u从schema.survey\u响应创建,其中S.CATEGORY在“黄色”、“蓝色”中,在R.CUSTOMERID=recs.CUSTOMERID和R.DATE\u CREATED=recs.DATE\u创建的R.CATEGORY中的R.CATEGORY在“黄色”、“蓝色”、“绿色”中起作用的地方按CUSTOMERID记录的“绿色”组!我忽略了在我创建的r.date_的连接条件周围包装一个trunc,以与我使用Max操作进行的截断一致。已更新我原始问题中的最终有效查询。非常感谢。