Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我想知道第二次参赛的日期和时间_Sql_Greatest N Per Group - Fatal编程技术网

Sql 我想知道第二次参赛的日期和时间

Sql 我想知道第二次参赛的日期和时间,sql,greatest-n-per-group,Sql,Greatest N Per Group,我想在SQL中获得第二个条目 Consgno Name Entrydatetime 111 A 01/03/2017 10:10:15 111 A 01/03/2017 10:20:15 111 A 01/03/2017 11:10:20 222 B 02/03/2017 10:10:25 222 B 02/03/2017 11:10:3

我想在SQL中获得第二个条目

Consgno     Name      Entrydatetime

 111          A     01/03/2017 10:10:15
 111          A     01/03/2017 10:20:15
 111          A     01/03/2017 11:10:20
 222          B     02/03/2017 10:10:25
 222          B     02/03/2017 11:10:36
 333          C     06/03/2017 10:10:25
 333          C     07/03/2017 10:10:12
 444          D     04/03/2017 10:10:41
 444          D     04/03/2017 01:10:20
 444          D     06/03/2017 10:10:32
一个Consgno已输入多个时间。 我想这样输出:

   Consgno  Name     Entrydatetime
    111      A      01/03/2017 10:20:15
    222      B      02/03/2017 11:10:36
    333      C      07/03/2017 10:10:12
    444      D      04/03/2017 01:10:20

sql server/oracle/Postgres:

with CTE as
(
select MyTable.*, row_number() over(partition by consgno order by entrydatetime) as rn
from MyTable
)
select *
from CTE
where rn = 2

在查询中使用OFFSET命令

SELECT DISTINCT  Consgno,Name,Entrydatetime  FROM tbl_test ORDER BY
    Consgno
LIMIT 1 OFFSET 1;
本例选择第二行。
Consgno必须是不同的

您可以参考我的查询。希望能帮上忙,我的朋友:))

(仅在DB支持窗口分析函数的情况下工作)

在这种情况下,如果同一个
Consgno
可能会重复
Entrydatetime
,并且您需要第二个
日期时间,则可以使用:

select * from (
    select   MyTable.*, 
    dense_rank() over(partition by consgno order by entrydatetime) as rnk,
    row_number() over(partition by consgno,entrydatetime order by entrydatetime) as rn
    from MyTable
) t
where  rnk = 2 and rn = 1

(请注意,如果
consgno
每行都有相同的
Entrydatetime
,则此查询根本不会返回
consgno

标记您正在使用的dbms。说到日期/时间,许多产品远远不符合ANSI SQL。列数据类型是否可能重复?格式是MM/DD/YYYY还是DD/MM/YYYY?列Entrydatetime类型是DD/MM/yyyyy。您需要将
Entrydatetime
添加到
订单中,由
执行?当
限制1
时,为什么
选择DISTINCT
?(顺便说一句,您确定OP使用的dbms支持特定于供应商的
限制吗?)。对于支持
独特的
的dbms,它将在没有
限制的情况下工作。只是给出了一个一般的解决方案错误的
根据预期的output@JohnHC:我已经测试过了,它按预期返回了输出,我的朋友!这次是的。对于更大的数据集,这不能保证它将返回OP暗示的第二次出现(按日期)output@JohnHC. 是的,你说得对。但他说他想在SQL中获得第二个条目,而不是依赖Entrydatetime字段。
select * from (
    select   MyTable.*, 
    dense_rank() over(partition by consgno order by entrydatetime) as rnk,
    row_number() over(partition by consgno,entrydatetime order by entrydatetime) as rn
    from MyTable
) t
where  rnk = 2 and rn = 1