Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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_Sql Server_Tsql - Fatal编程技术网

Sql 从预订表中获取进出日期

Sql 从预订表中获取进出日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,例如,我有这种桌子 ---------------------------------------------------------------------- | ID | USER | READER | DATETIME | ---------------------------------------------------------------------- | 1 | 1

例如,我有这种桌子

---------------------------------------------------------------------- | ID | USER | READER | DATETIME | ---------------------------------------------------------------------- | 1 | 1 | READER1 | 2020-01-14 08:12:43.000 | | 1 | 1 | READER2 | 2020-01-14 08:13:12.000 | | 1 | 1 | READER2 | 2020-01-14 10:12:19.000 | | 1 | 1 | READER1 | 2020-01-14 10:13:23.000 | | 1 | 1 | READER1 | 2020-01-14 10:30:43.000 | | 1 | 1 | READER1 | 2020-01-14 11:30:43.000 | ---------------------------------------------------------------------- ---------------------------------------------------------------------- |ID |用户|读卡器|日期时间| ---------------------------------------------------------------------- |阅读者2020-01-14 08:12:43.000| |1 | 1 | READER2 | 2020-01-14 08:13:12.000| |1 | 1 | READER2 | 2020-01-14 10:12:19.000| |阅读者2020-01-14 10:13:23.000| |阅读者2020-01-14 10:30:43.000| |阅读者2020-01-14 11:30:43.000| ---------------------------------------------------------------------- 我想获得每个阅读器的用户的输入和输出日期

例如:

------------------------------------------------------------------------------------- | USER | READER | IN | OUT | ------------------------------------------------------------------------------------- | 1 | READER1 | 2020-01-14 08:12:43.000 | 2020-01-14 10:13:23.000 | | 1 | READER2 | 2020-01-14 08:13:12.000 | 2020-01-14 10:12:19.000 | | 1 | READER1 | 2020-01-14 10:30:43.000 | 2020-01-14 11:30:43.000 | ------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------- |用户|读卡器|输入|输出| ------------------------------------------------------------------------------------- |1 | READER1 | 2020-01-14 08:12:43.000 | 2020-01-14 10:13:23.000| |1 | READER2 | 2020-01-14 08:13:12.000 | 2020-01-14 10:12:19.000| |1 | READER1 | 2020-01-14 10:30:43.000 | 2020-01-14 11:30:43.000| -------------------------------------------------------------------------------------
如何获得此结果?

我知道您希望对同一用户/读取器的每两条记录进行分组。您可以使用
row\u number()
lead()
进行以下操作:

select usr, reader, datetime [in], lead_datetime [out]
from (
    select 
        t.*,
        row_number() over(partition by usr, reader order by datetime) rn,
        lead(datetime) over(partition by usr, reader order by datetime) lead_datetime
    from mytable t
) t
where rn % 2 = 1
order by [in]

usr | reader | in | out --: | :------ | :------------------ | :------------------ 1 | READER1 | 2020-01-14 08:12:43 | 2020-01-14 10:13:23 1 | READER2 | 2020-01-14 08:13:12 | 2020-01-14 10:12:19 1 | READER1 | 2020-01-14 10:30:43 | 2020-01-14 11:30:43 usr读取器输入输出 --: | :------ | :------------------ | :------------------ 1 | READER1 | 2020-01-14 08:12:43 | 2020-01-14 10:13:23 1 |读写器2 | 2020-01-14 08:13:12 | 2020-01-14 10:12:19 1 | READER1 | 2020-01-14 10:30:43 | 2020-01-14 11:30:43
如果每个用户有两条以上的记录,您希望在结果集中有多少条记录?用更多的记录扩展您的示例数据可能会使ie更具代表性。我们渴望帮助,关键字是帮助-而不是为您做所有事情。让我们看看你尝试了什么,在哪里卡住了