SQL Server 2008。排序并在结果中插入自定义行
我有一个用于客户端和操作员之间通信的表,其中包含电话,id 1=客户端,2=操作员日期,消息。。。以及其他一些数据 我需要做一个存储过程,它将像这样对表进行排序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* . . . 所以,基本上,我需要找到由操作员发送的第一条消息,然后在下一条操作员消息之前找到客
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。这些条目是否有时间戳?是的,有时间戳。如何将操作员消息与客户端消息匹配?它们是否总是相对于时间戳顺序是连续的,或者您是否有一个自引用外键来实现这一点?您的示例还表明,每个操作员消息可能有多条客户端消息-正确吗?客户端消息和操作员消息在特定列中都有客户端编号。是的,在操作员消息之后可以有多条消息,只需选择“第一条”,然后选择“第一条操作员消息”,但在下一个操作员的信息之前。然后是下一个操作员的消息,以及之后的客户机消息,依此类推,对于每个数字。