Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 Server 2008。排序并在结果中插入自定义行_Sql_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

SQL Server 2008。排序并在结果中插入自定义行

SQL Server 2008。排序并在结果中插入自定义行,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我有一个用于客户端和操作员之间通信的表,其中包含电话,id 1=客户端,2=操作员日期,消息。。。以及其他一些数据 我需要做一个存储过程,它将像这样对表进行排序 number1 operaters message number1 clients message number1 clients message number1 operaters message number1 *no message* . . . 所以,基本上,我需要找到由操作员发送的第一条消息,然后在下一条操作员消息之前找到客

我有一个用于客户端和操作员之间通信的表,其中包含电话,id 1=客户端,2=操作员日期,消息。。。以及其他一些数据

我需要做一个存储过程,它将像这样对表进行排序

number1 operaters message
number1 clients message
number1 clients message
number1 operaters message
number1 *no message*
.
.
.
所以,基本上,我需要找到由操作员发送的第一条消息,然后在下一条操作员消息之前找到客户机消息。 若在一个操作符消息之后并没有客户机应答,我需要插入行,比如并没有客户机应答或类似的内容

这是一张很大的桌子,如果少走几步就好了

我知道如何按多列排序,我知道如何查找第一个运算符消息选择id所在的最小时间。。。但我不知道如何在需要的地方插入这些行

提前谢谢你的帮助


是的,它是MSSQL。

实际上并没有测试它,但这个总体思路应该是可行的:

INSERT INTO YOUR_TABLE(NUMBER, DATE, USER_ID, MESSAGE)
SELECT NUMBER, GETDATE(), 1, '*no message*'
FROM YOUR_TABLE T1
WHERE
    USER_ID = 2                       -- Operator.
    AND NOT EXISTS (
        SELECT *
        FROM YOUR_TABLE T2
        WHERE
            T1.NUMBER = T2.NUMBER
            AND T1.DATE <= T2.DATE
            AND USER_ID = 1           -- Client.
    )
简单英语:对于没有较年轻客户端消息的每个操作员消息,插入新的客户端消息

根据您的评论,USER_ID=1表示客户机,USER_ID=2表示操作员


还请注意,使用GetDate假定所有其他日期都是正确的,即它们都不是将来的日期,这意味着新插入的消息必须比其父运算符消息年轻。如果不能假设这一点,您可能需要在操作员消息的日期上使用DATEADD。

这些条目是否有时间戳?是的,有时间戳。如何将操作员消息与客户端消息匹配?它们是否总是相对于时间戳顺序是连续的,或者您是否有一个自引用外键来实现这一点?您的示例还表明,每个操作员消息可能有多条客户端消息-正确吗?客户端消息和操作员消息在特定列中都有客户端编号。是的,在操作员消息之后可以有多条消息,只需选择“第一条”,然后选择“第一条操作员消息”,但在下一个操作员的信息之前。然后是下一个操作员的消息,以及之后的客户机消息,依此类推,对于每个数字。