sql-server - SQL查询以查找日期没有差距的结果

标签 sql-server database

我有一个包含 ClaimNumber、NoteCreateDate、NoteType 的表格

我想找到在 NoteCreateDate 中没有间隔的背对背注释(如“评论已发送”)的声明

例如。

+-------------+----------------+--------------------+----------+
| ClaimNumber | NoteCreateDate |       Notes        | NoteType |
+-------------+----------------+--------------------+----------+
|       12121 | 12/01/2017     | ReviewSent         | Subject  |
|       12121 | 12/05/2017     | PackagesenttoABC   | Details  |
|       12121 | 12/07/2017     | ReviewSent         | Subject  |
|       10005 | 05/06/2018     | ReviewSent         | Subject  |
|       10005 | 05/07/2018     | ReviewSent         | Subject  |
|       10005 | 05/08/2018     | ReviewSent         | Subject  |
|       10005 | 05/12/2018     | Fieldinvestigation | SIU      |
+-------------+----------------+--------------------+----------+

预期 在这个例子中,我只想要 claim 编号 10005,因为它的 claim 中有“评论已发送”的注释,并且日期(连续日期)没有间隔。例如,我想找到具有今天创建的带有短语“ReviewSent”的注释的声明,并且以下注释也应该是相同的“Review sent”,无论它是何时创建的,可能是第二天甚至 10 天稍后 .. 提前致谢

我当前的 MS SQL 查询。

    select cm.ClaimNum, a.NoteCreateDate, a.Notes, a.NoteType 
        from CMaster cm
        left join Note a on cm.ClaimNum = a.PARENTREF
        left join NoteType] b on b.ID = a.TYPECODE 
        where Body like '%Review Sent%'

最佳答案

因此,如果您想找到 ReviewSent 注释被发回 2-back 的 ClaimNumber(s),那么此查询将获取它们

CREATE TABLE T1
    ([ClaimNumber] int, [NoteCreateDate] datetime, [Notes] varchar(18), [NoteType] varchar(7))
;

INSERT INTO T1
    ([ClaimNumber], [NoteCreateDate], [Notes], [NoteType])
VALUES
    (12121, '2017-12-01 00:00:00', 'ReviewSent', 'Subject'),
    (12121, '2017-12-05 00:00:00', 'PackagesenttoABC', 'Details'),
    (12121, '2017-12-07 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-06 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-07 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-08 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-12 00:00:00', 'Fieldinvestigation', 'SIU')
;

SELECT DISTINCT X.ClaimNumber
FROM(
    SELECT
         ClaimNumber
        ,NoteCreateDate
        ,Notes
        ,NoteType
        ,LD=LEAD( Notes )OVER(PARTITION BY ClaimNumber ORDER BY NoteCreateDate ASC)
    FROM dbo.T1
) X WHERE LD= 'ReviewSent' AND X.Notes= 'ReviewSent'

DROP TABLE dbo.T1

结果

ClaimNumber
10005

关于sql-server - SQL查询以查找日期没有差距的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50510956/

相关文章:

JavaScript 到 Microsoft SQL Server(AJAX 请求)

sql-server - 在sql server 2012中调试时查看表变量的内容

sql-server - 查找多父层次结构数据模型中两个节点之间的所有可能关系[SQL Server]

mysql - 从 MS SQL 插入 MySQL

mysql - DECIMAL类型舍入额外的小数并且不截断mysql

sql - 一对一关系还是一对多关系?

sql - 如何将所有包含用户、架构和角色的数据库从一台服务器移动/复制到另一台服务器

mongodb - 使用 Mongo 的 "Object ID"作为其唯一标识符可以吗?如果是这样,如何将其转换为字符串并按字符串查找?

php、phpmyadmin - 错误命令不同步;你现在不能运行这个命令

django - 无法通过 Django Test 测试对数据库的更改