Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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,我有一个表,其中包含事件发生的所有日期,但我只想显示另一个表中存在日期时发生的下一个事件 这是我的逻辑——我有两张表: 表1 userid date event 01 2018-01-01 A 01 2018-01-02 A 02 2018-01-01 A 03 2018-01-01 B 表2 userid date 01 2018-01-01 02

我有一个表,其中包含事件发生的所有日期,但我只想显示另一个表中存在日期时发生的下一个事件

这是我的逻辑——我有两张表:

表1

userid     date          event
01         2018-01-01    A
01         2018-01-02    A
02         2018-01-01    A
03         2018-01-01    B
表2

userid     date
01         2018-01-01
02         NULL
到目前为止,我所拥有的:

SELECT t1.userid, t1.date
FROM table_1 as t1
LEFT JOIN table_2 as t2 ON t1.userid = t2.userid
WHERE 1.event = 'A'
基本上,我想确定
table_2.date是否不为空
然后显示
table_1.date
where
table_1.date>table_2.date

结果应该如下所示:

userid     date
01         2018-01-02

由于userid 01在表2中有一个日期值,因此我得到的日期大于表2中的日期。

您可以使用
exists

select t1.*
from table_1 t1
where event = 'A' and
      exists (select 1 
              from table_2 t2
              where t2.userid = t1.userid and 
                    (t2.date is not null and t1.date > t2.date));
但是,
不是空的
过滤器在这里是多余的,您可以直接将其简化为

where event = 'A' and
      exists (select 1 from table_2 t2 
                       where t2.userid = t1.userid and t1.date > t2.date);

让我们来看一个相关子查询:

select t2.*,
       (select top (1) t1.date
        from table1 t1
        where t1.userid = t2.userid and t1.event = 'A' and t1.date > t2.date
        order by t2.date desc
       ) t1_date
from table2 t2
where t2.date is not null;

你把大部分逻辑都写进了你的问题。只要使用一个左连接,你就应该有99.999%的路径。我想这可能需要更多的细节。相同的
userid
能否在
表2
中多次出现?如果是,这将如何影响预期结果?此外,您还写道,您需要“下一个事件”-单数。这是否意味着,例如,如果
表_1
有一个附加记录,其中
userid=01
date=2018-01-03
,则预期结果仍然只包括该用户的2018-01-02事件?@JoeFarrell很抱歉造成混淆。表2中的用户ID只显示一次。但是,它将在表1中多次显示。我会补充更多细节。基本上,表1有一个偶数标识符,将显示在表2中。这个答案完全有效,谢谢!我使用您共享的子查询两次,共两列,一列显示日期,一列显示事件类型。我知道我在最初的问题中没有提到这一点,但是有没有更有效的方法呢?@kazzi。你能再问一个问题吗?