簡體   English   中英

MySQL查詢兩個表和最大時間戳

[英]MySQL Query Two Tables and Max Timestamp

我有兩個看起來像這樣的表:

TABLE_conversations:

+-----------------+----------+----------------+------------+---------------------+--------+
| CONVERSATION_ID | QUEUE_ID | CONTACT_NUMBER | CONTACT_ID | DATE_CREATED        | STATUS |
+-----------------+----------+----------------+------------+---------------------+--------+
|               1 |        1 | 15551112222    |    9000001 | 2014-09-12 00:28:24 | ACTIVE |
|               2 |        1 | 15553334444    |    9000002 | 2014-09-12 00:32:08 | ACTIVE |
+-----------------+----------+----------------+------------+---------------------+--------+

TABLE_messages:

+------------+-----------------+-------------+-------------+-----------+---------+---------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+
| MESSAGE_ID | CONVERSATION_ID | FROM_NUMBER | TO_NUMBER   | DIRECTION | SENDER  | TIMESTAMP          | VIEWED | MESSAGE                                                                                                         | STATUS |
+------------+-----------------+-------------+-------------+-----------+---------+---------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+
|          1 |               1 | 15551112222 | 17021112222 | IN        | 9000001 | 2014-09-12 00:30:11 |      1 | Hello!  Is this working?                                                                     | ACTIVE |
|          2 |               1 | 17021112222 | 15551112222 | OUT       | 8000001 | 2014-09-12 00:31:05 |      1 | Good evening!  Of course!  | ACTIVE |
|          3 |               1 | 15551112222 | 17021112222 | IN        | 9000001 | 2014-09-12 00:31:27 |      1 | Perfect.  Thank you!                                                                                            | ACTIVE |
|          4 |               1 | 17021112222 | 15553334444 | OUT       | 8000002 | 2014-09-12 00:32:52 |      1 | Ticket 11251 is ready for pickup.                                                                         | ACTIVE |
+------------+-----------------+-------------+-------------+-----------+---------+---------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+

我正在嘗試運行查詢以選擇CONVERSATION_ID,CONTACT_NUMBER,CONTACT_ID和最近的TIMESTAMP,並按電話號碼進行分組:

SELECT TABLE_conversations.CONVERSATION_ID, TABLE_conversations.CONTACT_NUMBER,
       TABLE_conversations.CONTACT_ID, MAX(TABLE_messages.TIMESTAMP) 
FROM TABLE_conversations, TABLE_messages 
WHERE TABLE_conversations.STATUS='ACTIVE' 
AND TABLE_messages.STATUS='ACTIVE' 
GROUP BY CONTACT_NUMBER 
ORDER BY TABLE_messages.TIMESTAMP;

我得到的輸出如下:

+-----------------+----------------+------------+-------------------------------+
| CONVERSATION_ID | CONTACT_NUMBER | CONTACT_ID | MAX(TABLE_messages.TIMESTAMP) |
+-----------------+----------------+------------+-------------------------------+
|               1 | 15551112222    |    9000001 | 2014-09-12 00:32:52           |
|               2 | 15553334444    |    9000002 | 2014-09-12 00:32:52           |
+-----------------+----------------+------------+-------------------------------+

兩者的時間戳相同。 我想要的結果是15551112222為2014-09-12 00:31:27和15553334444為2014-09-12 00:32:52。

非常感謝任何幫助!

您缺少表之間的聯接條件,因此獲得了完整的叉積。 因此,每個對話都與每條消息一起加入,而不僅僅是該對話中的消息。

SELECT TABLE_conversations.CONVERSATION_ID, TABLE_conversations.CONTACT_NUMBER,
       TABLE_conversations.CONTACT_ID, MAX(TABLE_messages.TIMESTAMP) 
FROM TABLE_conversations
JOIN TABLE_messages ON TABLE_conversations.conversation_id = TABLE_messages.conversation_id
WHERE TABLE_conversations.STATUS='ACTIVE' 
AND TABLE_messages.STATUS='ACTIVE' 
GROUP BY CONTACT_NUMBER 
ORDER BY TABLE_messages.TIMESTAMP;

您的sql交叉連接了兩個表中的所有行,因此任何組的最大時間戳都相同。

SELECT TABLE_conversations.CONVERSATION_ID, 
       TABLE_conversations.CONTACT_NUMBER, 
       TABLE_conversations.CONTACT_ID, 
       MAX(TABLE_messages.TIMESTAMP) 
FROM TABLE_conversations
JOIN TABLE_messages 
ON TABLE_conversations.CONVERSATION_ID = TABLE_messages.CONVERSATION_ID 
WHERE TABLE_conversations.STATUS='ACTIVE' 
      AND TABLE_messages.STATUS='ACTIVE' 
GROUP BY CONTACT_NUMBER 

建議您擺脫分組和聚集功能,以了解完全交叉聯接和內部聯接之間的區別。 如:

SELECT TABLE_conversations.CONVERSATION_ID, 
       TABLE_conversations.CONTACT_NUMBER, 
       TABLE_conversations.CONTACT_ID, 
       TABLE_messages.TIMESTAMP
FROM TABLE_conversations
JOIN TABLE_messages 
ON TABLE_conversations.CONVERSATION_ID = TABLE_messages.CONVERSATION_ID 
--without on clause above, comes to the full cross join
WHERE TABLE_conversations.STATUS='ACTIVE' 
      AND TABLE_messages.STATUS='ACTIVE' 
ORDER BY TABLE_messages.TIMESTAMP;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM