oraclesqlslastn记录

oraclesqlslastn记录,sql,oracle,Sql,Oracle,通过使用rownum功能,我已经阅读了大量关于oraclesql中最后n条记录的文章,但是在我的例子中,它没有给出正确的行 我的表中有3列:1 message varchar、mes_date date和mes_time varchar2 里面有3条记录: Hello world | 20-OCT-14 | 23:50 World Hello | 21-OCT-14 | 02:32 Hello Hello | 20-OCT-14 | 23:52 我想按日期和时间获取最后2条记录,第一行是最早的

通过使用rownum功能,我已经阅读了大量关于oraclesql中最后n条记录的文章,但是在我的例子中,它没有给出正确的行

我的表中有3列:1 message varchar、mes_date date和mes_time varchar2

里面有3条记录:

Hello world | 20-OCT-14 | 23:50
World Hello | 21-OCT-14 | 02:32
Hello Hello | 20-OCT-14 | 23:52
我想按日期和时间获取最后2条记录,第一行是最早的,第二行是最新的日期/时间

我正在使用此查询:

SELECT * 
  FROM (SELECT message 
          FROM messages 
         ORDER 
            BY MES_DATE, MES_TIME DESC
       ) 
  WHERE ROWNUM <= 2 ORDER BY ROWNUM DESC;
我没有将第3行作为第一行和第二行2,而是得到了第1行和第3行

我应该怎么做才能让旧的日期/时间排在最前面,然后是最新的日期/时间

也许这有助于:

SELECT * 
  FROM (SELECT message,
               mes_date,
               mes_time,
               ROW_NUMBER() OVER (ORDER BY TO_DATE(TO_CHAR(mes_date, 'YYYY-MM-DD') || mes_time, 'YYYY-MM-DD HH24:MI') DESC) rank
          FROM messages 
       ) 
  WHERE rank <= 2
  ORDER 
     BY rank
也许这有助于:

SELECT * 
  FROM (SELECT message,
               mes_date,
               mes_time,
               ROW_NUMBER() OVER (ORDER BY TO_DATE(TO_CHAR(mes_date, 'YYYY-MM-DD') || mes_time, 'YYYY-MM-DD HH24:MI') DESC) rank
          FROM messages 
       ) 
  WHERE rank <= 2
  ORDER 
     BY rank
也许这有助于:

SELECT * 
  FROM (SELECT message,
               mes_date,
               mes_time,
               ROW_NUMBER() OVER (ORDER BY TO_DATE(TO_CHAR(mes_date, 'YYYY-MM-DD') || mes_time, 'YYYY-MM-DD HH24:MI') DESC) rank
          FROM messages 
       ) 
  WHERE rank <= 2
  ORDER 
     BY rank
也许这有助于:

SELECT * 
  FROM (SELECT message,
               mes_date,
               mes_time,
               ROW_NUMBER() OVER (ORDER BY TO_DATE(TO_CHAR(mes_date, 'YYYY-MM-DD') || mes_time, 'YYYY-MM-DD HH24:MI') DESC) rank
          FROM messages 
       ) 
  WHERE rank <= 2
  ORDER 
     BY rank

我真的很抱歉让你失望,但在甲骨文中没有最后两张唱片

表结构不在末尾分配数据,也不保留时间的可见属性。唯一保留的时间仅用于闪回查询—提供截至时间点的结果,例如查询开始的时间

最后插入的记录不能使用数据库查询

你能做什么?您可以创建一个触发器,该触发器使用序列对插入的记录进行排序,并基于该序列进行选择,以便按seq DESC从表顺序中选择*from select*from ORDER BY seq DESC,其中rownum<3-这将仅在序列缓存值为1时确保顺序

请注意,如果包含消息日期的列在一秒钟内没有很多事件,您可以使用该列,正如另一种解决方案所建议的那样-例如,如果一秒钟内到达的事件超过2个,则上面的查询将随机提供两条记录,而不是实际的最后两条记录

同样-Oracle将无法查询插入的最后两行,因为其数据结构不管理插入顺序,并且在某些特定情况下,运行SELECT*时看到的顺序独立于实际插入


如果您对本答案的任何部分有任何疑问,请将其张贴在此处,我将重点对其进行更深入的解释。

我真的很抱歉让您失望-但在Oracle中没有最后两条记录

表结构不在末尾分配数据,也不保留时间的可见属性。唯一保留的时间仅用于闪回查询—提供截至时间点的结果,例如查询开始的时间

最后插入的记录不能使用数据库查询

你能做什么?您可以创建一个触发器,该触发器使用序列对插入的记录进行排序,并基于该序列进行选择,以便按seq DESC从表顺序中选择*from select*from ORDER BY seq DESC,其中rownum<3-这将仅在序列缓存值为1时确保顺序

请注意,如果包含消息日期的列在一秒钟内没有很多事件,您可以使用该列,正如另一种解决方案所建议的那样-例如,如果一秒钟内到达的事件超过2个,则上面的查询将随机提供两条记录,而不是实际的最后两条记录

同样-Oracle将无法查询插入的最后两行,因为其数据结构不管理插入顺序,并且在某些特定情况下,运行SELECT*时看到的顺序独立于实际插入


如果您对本答案的任何部分有任何疑问,请将其张贴在此处,我将重点对其进行更深入的解释。

我真的很抱歉让您失望-但在Oracle中没有最后两条记录

表结构不在末尾分配数据,也不保留时间的可见属性。唯一保留的时间仅用于闪回查询—提供截至时间点的结果,例如查询开始的时间

最后插入的记录不能使用数据库查询

你能做什么?您可以创建一个触发器,该触发器使用序列对插入的记录进行排序,并基于该序列进行选择,以便按seq DESC从表顺序中选择*from select*from ORDER BY seq DESC,其中rownum<3-这将仅在序列缓存值为1时确保顺序

请注意,如果包含消息日期的列在一秒钟内没有很多事件,您可以使用该列,正如另一种解决方案所建议的那样-例如,如果一秒钟内到达的事件超过2个,则上面的查询将随机提供两条记录,而不是实际的最后两条记录

同样-Oracle将无法查询插入的最后两行,因为其数据结构不管理插入顺序,并且在某些特定情况下,运行SELECT*时看到的顺序独立于实际插入


如果您对本答案的任何部分有任何疑问,请将其张贴在此处,我将重点对其进行更深入的解释。

我真的很抱歉让您失望-但在Oracle中没有最后两条记录

这张桌子很漂亮 Structure不在最后分配数据,也不保留时间的可见属性。唯一保留的时间仅用于闪回查询——提供截至时间点的结果,例如查询开始的时间

最后插入的记录不能使用数据库查询

你能做什么?您可以创建一个触发器,该触发器使用序列对插入的记录进行排序,并基于该序列进行选择,以便按seq DESC从表顺序中选择*from select*from ORDER BY seq DESC,其中rownum<3-这将仅在序列缓存值为1时确保顺序

请注意,如果包含消息日期的列在一秒钟内没有很多事件,您可以使用该列,正如另一种解决方案所建议的那样-例如,如果一秒钟内到达的事件超过2个,则上面的查询将随机提供两条记录,而不是实际的最后两条记录

同样-Oracle将无法查询插入的最后两行,因为其数据结构不管理插入顺序,并且在某些特定情况下,运行SELECT*时看到的顺序独立于实际插入



如果您对本答案的任何部分有任何疑问,请将其张贴在此处,我将重点对其进行更深入的解释。

有。您可以使用OP排序的日期,因此“last”有一个明确的定义。不,您不能使用ROWID。了解ROWID的结构。ROWID是为每个查询生成的,并不表示插入的时间,而是表示查询的顺序。OP使用的日期如何?问题是Oracle没有任何暗示插入顺序的信息。数据库是用来高效存储资料的。。如果要向数据中添加暗示顺序的内容,则必须手动添加—如果消息的解析确保在需要排序时不超过两条记录落入同一时间段,则必须使用使用日期或时间戳的序列添加具有插入顺序的列。Oracle将其放在数据库体系结构上以解决应用程序需求,Oracle将管理您需要存储的任何内容的存储。但这就足够了,对吗?按MES_日期,MES_时间有。您可以使用OP排序的日期,因此“last”有一个明确的定义。不,您不能使用ROWID。了解ROWID的结构。ROWID是为每个查询生成的,并不表示插入的时间,而是表示查询的顺序。OP使用的日期如何?问题是Oracle没有任何暗示插入顺序的信息。数据库是用来高效存储资料的。。如果要向数据中添加暗示顺序的内容,则必须手动添加—如果消息的解析确保在需要排序时不超过两条记录落入同一时间段,则必须使用使用日期或时间戳的序列添加具有插入顺序的列。Oracle将其放在数据库体系结构上以解决应用程序需求,Oracle将管理您需要存储的任何内容的存储。但这就足够了,对吗?按MES_日期,MES_时间有。您可以使用OP排序的日期,因此“last”有一个明确的定义。不,您不能使用ROWID。了解ROWID的结构。ROWID是为每个查询生成的,并不表示插入的时间,而是表示查询的顺序。OP使用的日期如何?问题是Oracle没有任何暗示插入顺序的信息。数据库是用来高效存储资料的。。如果要向数据中添加暗示顺序的内容,则必须手动添加—如果消息的解析确保在需要排序时不超过两条记录落入同一时间段,则必须使用使用日期或时间戳的序列添加具有插入顺序的列。Oracle将其放在数据库体系结构上以解决应用程序需求,Oracle将管理您需要存储的任何内容的存储。但这就足够了,对吗?按MES_日期,MES_时间有。您可以使用OP排序的日期,因此“last”有一个明确的定义。不,您不能使用ROWID。了解ROWID的结构。ROWID是为每个查询生成的,并不表示插入的时间,而是表示查询的顺序。OP使用的日期如何?问题是Oracle没有任何暗示插入顺序的信息。数据库是用来高效存储资料的。。如果要向数据中添加暗示顺序的内容,则必须手动添加—如果消息的解析确保在需要排序时不超过两条记录落入同一时间段,则必须使用使用日期或时间戳的序列添加具有插入顺序的列。Oracle将其放在数据库体系结构上以解决应用程序需求,Oracle将管理您需要存储的任何内容的存储。但这就足够了,对吗?通过这种方式,我得到了最早的两行:23:50,23:52,只在分析函数中的ORDER BY表达式后面出现一个DESC
我得到了最早的两行:23:50,23:52只在分析函数中的ORDER BY表达式后出现一个DESC。这样我得到了最早的两行:23:50,23:52只在分析函数中的ORDER BY表达式后出现一个DESC。这样我得到了最早的两行:23:50,23:52仅在分析函数中的ORDER BY表达式后显示DESC。您能否将select的结果发布到rownum<3的消息中的日期'MM/DD/YYYY HH24:MI:SS'?日期数据结构保存其中的小时。。。我希望你真的把它存储在那里,这样你的生活会更轻松。你能从rownum<3的消息中发布select to_charmes_date,'MM/DD/YYYY HH24:MI:SS'的结果吗?日期数据结构保存其中的小时。。。我希望你真的把它存储在那里,这样你的生活会更轻松。你能从rownum<3的消息中发布select to_charmes_date,'MM/DD/YYYY HH24:MI:SS'的结果吗?日期数据结构保存其中的小时。。。我希望你真的把它存储在那里,这样你的生活会更轻松。你能从rownum<3的消息中发布select to_charmes_date,'MM/DD/YYYY HH24:MI:SS'的结果吗?日期数据结构保存其中的小时。。。我希望你真的把它放在那里,这样你的生活就容易多了