我有一个具有名称,值,时间列的Oracle表。基本上,该表用于记录目的,用于存储对特定名称所做的更改,以前的值是什么以及更改时间。
我需要制定一个查询来获取特定名称的前n个更改,并且输出应具有表中的所有名称。任何帮助/建议吗?
编辑:
Name Value Time
Harish Pass 1-Nov-2011
Ravi Fail 2-Nov-2011
Harish Absent 31-Oct-2011
Harish Attended 31-Aug-2011
Harish Present 31-Jul-2011
我需要选择11月1日,10月31日,8月31日和Ravi的Harish的详细信息。
这是你所追求的吗?
我的测试设置:
SQL> alter session set nls_date_format = 'DD-Mon-YYYY HH24:Mi:SS';
Session altered.
SQL> drop table so_test;
Table dropped.
SQL> create table so_test (
2 n varchar2(32)
3 , v varchar2(32)
4 , t date );
Table created.
SQL>
SQL> insert into so_test values ( 'X' , 'Test1', to_date('01-Jan-2011 12:00:00','DD-Mon-YYYY HH24:Mi:SS') );
1 row created.
SQL> insert into so_test values ( 'X' , 'Test2', to_date('01-Jan-2011 13:00:00','DD-Mon-YYYY HH24:Mi:SS') );
1 row created.
SQL> insert into so_test values ( 'X' , 'Test3', to_date('01-Jan-2011 14:00:00','DD-Mon-YYYY HH24:Mi:SS') );
1 row created.
SQL> insert into so_test values ( 'Y' , 'Test5', to_date('02-Jan-2011 12:00:00','DD-Mon-YYYY HH24:Mi:SS') );
1 row created.
SQL> insert into so_test values ( 'Y' , 'Test6', to_date('03-Jan-2011 12:00:00','DD-Mon-YYYY HH24:Mi:SS') );
1 row created.
SQL> insert into so_test values ( 'Y' , 'Test7', to_date('04-Jan-2011 12:00:00','DD-Mon-YYYY HH24:Mi:SS') );
1 row created.
SQL>
这是查询:
SQL> select n,v,t from (
2 select n, v , t , rank() over ( partition by n order by t desc) r
3 from so_test
4 ) where r <= 2;
N V T
-------------------------------- -------------------------------- --------------------
X Test3 01-Jan-2011 14:00:00
X Test2 01-Jan-2011 13:00:00
Y Test7 04-Jan-2011 12:00:00
Y Test6 03-Jan-2011 12:00:00
SQL>
问题描述 这道题是 LeetCode 77 题。 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 解法一:回溯法 递归 k 层。每层选取一个数,然后递归地选取 k-1 个数,直到选够 k 个数为止。设每层的数字区间为 [start, end],则这一层可以选择 [start, end-(k-1)] 的任何一个数 i,只要给下一层留出 k-1 个数即可。下一层的数字区间为
问题内容: 例如,是否可以选择一组元素中的每个第四个元素? 例如:我有16个元素…我可以写类似的东西。 有一个更好的方法吗? 问题答案: 顾名思义,它允许您使用除常数以外的变量构造算术表达式。您可以执行加法(),减法()和系数乘法(其中是整数,包括正数,负数和零)。 这是重写上面的选择器列表的方法: 有关这些算术表达式如何工作的解释,请参见我对该问题的回答以及规范。 请注意,此答案假设同一父元素内
问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。
问题内容: 我已阅读这篇文章:http : //www.xaprb.com/blog/2006/12/07/how- to-select-the-firstleastmax-row-per-group-in- sql/ 并搜索其他问题 我有一个像这样的表: 我正在尝试获取按user.id分组的table.id的计数,如果user.id的计数大于7,则仅将结果显示为7(也就是将计数结果限制为7)。
问题内容: 做到这一点的最佳方法是什么? 问题答案: 使用 array_slice() 这是PHP手册中的一个示例:array_slice 只有一个小问题 如果数组索引对您有意义,请记住这将重置并重新排列 数字 数组索引。您需要设置标志来避免这种情况。(第4个参数,自5.0.2起可用)。 例: 输出:
问题内容: 我真的很困惑查询需要返回在特定列上具有最大值的前N行。 例如,如果行具有相同的值。我必须返回还是要排。 问题答案: 如果您这样做: 您将获得前N行。 如果您这样做: 或者,您可以将其表达为: 从概念上讲,以下是您想要执行的操作,但在MySQL中可能不起作用: