场景
一个chat_channel可以有多个MESSAGE_ID,它们显示在单独的行上。
INSERT INTO messages_tbl
(message_id,
chat_channel,
user_type,
message_type,
message_custom_type,
msg_created_on)
VALUES ('00001',
'chat_1',
'consumer',
'msg',
'example message',
'2018-09-27 10:14:42');
INSERT INTO messages_tbl
(message_id,
chat_channel,
user_type,
message_type,
message_custom_type,
msg_created_on)
VALUES ('00002',
'chat_1',
'merchant',
'msg',
'example message',
'2018-09-27 11:14:42');
在此示例中,我想比较并计算从消费者发送的第一条消息到商家发送的第二条消息的响应时间。有关时间和日期的数据在MSG_CREATED_ON列中。
我能够进行计算,但是由于它们在不同的行上而挣扎。我曾尝试在CHAT_CHANNEL上对它们进行分区,但没有运气。
有什么想法吗?
答案 0 :(得分:1)
下面是一种方法-
this.validUntil = "2020-02-29";
this.validUntil = moment(this.validUntil);
this.validUntil = this.validUntil.format('DD-MM-YYYY');
this.finAuth = this.validUntil;
this.finAuth = moment().add(moment.duration(this.validityPeriodAsDay, 'days')).format('DD-MM-YYYY');
答案 1 :(得分:0)
鉴于您使用的是MySQL 8+,我们可以利用分析功能。这是一种方法:
axios.get('https://newsapi.org/v2/everything?q=' + this.query + "&apiKey=6d2c267eacd549e79d27f597d7917699"')
我使用WITH cte AS (
SELECT CHAT_CHANNEL, MSG_CREATED_ON,
ROW_NUMBER() OVER (PARTITION BY USER_TYPE ORDER BY MSG_CREATED_ON) rn
FROM MESSAGES_TBL
)
SELECT
t1.CHAT_CHANNEL,
t1.rn AS conversation_number,
TIMESTAMPDIFF(MINUTE, t1.MSG_CREATED_ON, t2.MSG_CREATED_ON) AS diff_in_minutes
FROM cte t1
LEFT JOIN cte t2
ON t1.CHAT_CHANNEL = t2.CHAT_CHANNEL AND
t1.rn = t2.rn AND
t1.USER_TYPE = 'consumer' AND
t2.USER_TYPE = 'merchant'
为每个聊天频道的消费者和商人之间的每个配对配对分配一个公共值。然后,我一起加入聊天频道,并且谈话内容相同。