Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 - Fatal编程技术网

SQL-从行中获取值

SQL-从行中获取值,sql,Sql,我有下表: id date name id2 1 1/1/2017 demi 2 1/2/2017 demi 3 1/3/2017 demi 我希望id2列显示基于最近日期的id。输出应为: id date name id2 1 1/1/2017 demi 2 2 1/2/2017 demi 3 3 1/3/2017 demi 非常感谢您的帮助。对于MS SQL,您可以

我有下表:

id    date      name     id2
1     1/1/2017  demi
2     1/2/2017  demi
3     1/3/2017  demi
我希望id2列显示基于最近日期的id。输出应为:

id    date      name     id2
1     1/1/2017  demi     2
2     1/2/2017  demi     3
3     1/3/2017  demi

非常感谢您的帮助。

对于MS SQL,您可以使用下一个查询:

id |日期|姓名| id2 -: | :------------------ | :--- | ---: 2017年1月1日00:00:00半小时2 2017年2月1日00:00:00 2017年3月1日00:00:00半小时无效
dbfiddle

我不明白,对于id=1的行,如何找到id2值2?您能更好地解释您的要求吗?这没有道理。对于ID1和id2,id2的两个值不应该都是3吗?这是'demi'的最长日期为什么第1行的id2设置为2?表中最近的日期是2017年1月3日,这意味着所有行的id2都应设置为3。你的意思是想知道下一行的日期吗?我没有很好地描述这个问题。很抱歉。我有另一个名为Entid的列,它是唯一标识符。基本上,我希望id2根据之后最近的日期显示行的id。在这种情况下,最近的日期不是2017年1月3日吗?在这种情况下,它不会显示id2的任何内容。
create table mytable (id int, [date] date, name varchar(100), id2 int);
insert into mytable values
(1,     '20170101',  'demi', null),
(2,     '20170201',  'demi', null),
(3,     '20170301',  'demi', null);
GO
3 rows affected
SELECT id, [date], name, 
       (SELECT TOP 1 id
        FROM   mytable
        WHERE  [date] > t1.[date]
        ORDER BY id, [date] ASC) id2
FROM   mytable t1
GO
id | date | name | id2 -: | :------------------ | :--- | ---: 1 | 01/01/2017 00:00:00 | demi | 2 2 | 01/02/2017 00:00:00 | demi | 3 3 | 01/03/2017 00:00:00 | demi | null