Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 在同一列中查找Datediff_Sql - Fatal编程技术网

Sql 在同一列中查找Datediff

Sql 在同一列中查找Datediff,sql,Sql,我有一个跨越边界的数据表。A希望护照名至少有一个BorderCrossingDateTime间隔,时间间隔大于4个月 BorderCrossingID PassportNumber BorderCrossingDateTime 1 ER-2222 2019-01-07 22:11:12.000 2 ER-2222 2019-01-07 23:11:12.000 3

我有一个跨越边界的数据表。A希望护照名至少有一个BorderCrossingDateTime间隔,时间间隔大于4个月

BorderCrossingID    PassportNumber  BorderCrossingDateTime
1                    ER-2222        2019-01-07 22:11:12.000
2                    ER-2222        2019-01-07 23:11:12.000
3                    KL-5233        2018-10-03 17:10:39.000
130                  FF-4444        2019-01-08 11:11:11.000
5                    ER-1111        NULL
6                    KL-5686        NULL
7                    ER-1111        NULL
8                    KL-5235        NULL
9                    QW-5656        NULL
10                   DF-5685        NULL
11                   KL-4558        NULL
--------
113                 LL-8989         2019-01-15 16:24:26.333
114                 ZZ-0005         2019-01-17 16:18:12.273
115                 LL-0223         2019-01-17 16:19:12.000
116                 ER-2222         2019-01-03 08:24:29.000
117                 ER-2222         2019-02-01 08:25:03.873
118                 ER-2222         2019-03-13 08:25:17.000
119                 ER-2222         2019-04-10 08:25:32.000
120                 ER-2222         2019-09-30 08:25:47.000
我已经得到了边界,有了边界日期时间,并把它们整理好了

SELECT DISTINCT PassportNumber, BorderCrossingDateTime FROM Passports
WHERE DATEDIFF(Compare 2 upcoming DateTimes)
EXCEPT
SELECT PassportNumber, BorderCrossingDateTime FROM Passports
WHERE BorderCrossingDateTime IS NULL 
ORDER BY BorderCrossingDateTime
结果应该是这样的:

PassportName
ER-2222
TO-0140
NN-4444
TP-0140
TT-0140
WU-5645

下面的代码将起作用。我已经在SQLServer中进行了测试。我正在使用,函数查找上一个、下一个过境日期

    CREATE TABLE #borderCrossing (BorderCrossingID INT, PassportNumber VARCHAR(10), BorderCrossingDateTime DATETIME)

INSERT INTO #borderCrossing
VALUES (1, 'ER-2222', '2019-01-07 22:11:12.000'), (2, 'ER-2222', '2019-03-07 22:11:12.000'), (3, 'ER-2222', '2019-08-07 22:11:12.000');

SELECT DISTINCT PassportNumber
FROM (
    SELECT BorderCrossingId, BorderCrossingDateTime AS CurrentBorderCrossingDateTime, passportNumber, lag(BorderCrossingDateTime, 1, NULL) OVER (
            PARTITION BY passportNumber ORDER BY BorderCrossingDateTime
            ) AS prevBorderCrossingDateTime, lead(BorderCrossingDateTime, 1, NULL) OVER (
            PARTITION BY passportNumber ORDER BY BorderCrossingDateTime
            ) AS nextBorderCrossingDateTime
    FROM #borderCrossing
    ) AS t
WHERE DATEDIFF(mm, prevBorderCrossingDateTime, nextBorderCrossingDateTime) > 4

下面的代码将起作用。我已经在SQLServer中进行了测试。我正在使用,函数查找上一个、下一个过境日期

    CREATE TABLE #borderCrossing (BorderCrossingID INT, PassportNumber VARCHAR(10), BorderCrossingDateTime DATETIME)

INSERT INTO #borderCrossing
VALUES (1, 'ER-2222', '2019-01-07 22:11:12.000'), (2, 'ER-2222', '2019-03-07 22:11:12.000'), (3, 'ER-2222', '2019-08-07 22:11:12.000');

SELECT DISTINCT PassportNumber
FROM (
    SELECT BorderCrossingId, BorderCrossingDateTime AS CurrentBorderCrossingDateTime, passportNumber, lag(BorderCrossingDateTime, 1, NULL) OVER (
            PARTITION BY passportNumber ORDER BY BorderCrossingDateTime
            ) AS prevBorderCrossingDateTime, lead(BorderCrossingDateTime, 1, NULL) OVER (
            PARTITION BY passportNumber ORDER BY BorderCrossingDateTime
            ) AS nextBorderCrossingDateTime
    FROM #borderCrossing
    ) AS t
WHERE DATEDIFF(mm, prevBorderCrossingDateTime, nextBorderCrossingDateTime) > 4

大家好,欢迎来到Stack Overflow。请在标记中指定您正在使用的DBMS(SQL Server、MySQL等):)@Brokkoli。你怎么知道他们要往哪个方向走?你是在寻找只在边境一侧生活4个月的人吗?这是我得到的任务。我不得不提出7个问题,最后一个是上面的问题。无论如何,在程序中,数字是一个参数,所以它是可变的。您好,欢迎来到堆栈溢出。请在标记中指定您正在使用的DBMS(SQL Server、MySQL等):)@Brokkoli。你怎么知道他们要往哪个方向走?你是在寻找只在边境一侧生活4个月的人吗?这是我得到的任务。我不得不提出7个问题,最后一个是上面的问题。无论如何,在程序中,数字是一个参数,因此可以更改。谢谢!这很有帮助!我将主要部分改为“基本”BorderCrossingDateTime,以便在只有两个DateTime的情况下使用PassportName。再次感谢!非常感谢。这很有帮助!我将主要部分改为“基本”BorderCrossingDateTime,以便在只有两个DateTime的情况下使用PassportName。再次感谢!