的加入行條件我有兩個表:MySQL的 - 從右表
mysql> select * from orders;
+------+---------------------+------------+---------+
| id | created_at | foreign_id | data |
+------+---------------------+------------+---------+
| 1 | 2010-10-10 10:10:10 | 3 | order 1 |
| 4 | 2010-10-10 00:00:00 | 6 | order 4 |
| 5 | 2010-10-10 00:00:00 | 7 | order 5 |
+------+---------------------+------------+---------+
mysql> select * from activities;
+------+---------------------+------------+------+
| id | created_at | foreign_id | verb |
+------+---------------------+------------+------+
| 1 | 2010-10-10 10:10:10 | 3 | get |
| 2 | 2010-10-10 10:10:15 | 3 | set |
| 3 | 2010-10-10 10:10:20 | 3 | put |
| 4 | 2010-10-10 00:00:00 | 6 | get |
| 5 | 2010-10-11 00:00:00 | 6 | set |
| 6 | 2010-10-12 00:00:00 | 6 | put |
+------+---------------------+------------+------+
現在我需要在foreign_id
柱orders
加入activities
:只選擇一個活動(如果存在)爲每個順序, ABS(TIMESTAMPDIFF(SECOND, orders.created_at, activities.created_at))
是最小的。例如。訂單和活動大約在同一時間創建。
+----------+---------+---------------------+-------------+------+---------------------+
| order_id | data | order_created_at | activity_id | verb | activity_created_at |
+----------+---------+---------------------+-------------+------+---------------------+
| 1 | order 1 | 2010-10-10 10:10:10 | 1 | get | 2010-10-10 10:10:10 |
| 4 | order 4 | 2010-10-10 00:00:00 | 4 | get | 2010-10-10 00:00:00 |
| 5 | order 5 | 2010-10-10 00:00:00 | NULL | NULL | NULL |
+----------+---------+---------------------+-------------+------+---------------------+
以下查詢生成包含所需行的一組行。如果包含GROUP BY
語句,則無法控制activities
中的哪一行加入。
SELECT o.id AS order_id
, o.data AS data
, o.created_at AS order_created_at
, a.id AS activity_id
, a.verb AS verb
, a.created_at AS activity_created_at
FROM orders AS o
LEFT JOIN activities AS a ON a.foreign_id = o.foreign_id;
是否可以寫這樣的查詢?理想情況下,我想避免使用group by,因爲此部分是大型報告querty的一部分。
你想做什麼做用這行代碼:'ABS(TIMESTAMPDIFF(SECOND,orders.created_at,activities.created_at))'? – 2013-03-11 15:02:42
我想盡量減少這個值。例如。如果訂單已在11:00創建,並且有三項活動(1,09:00),(2,10:00),(3,11:00),(3,12:00),我希望第三項活動。該行將返回創建或訂單與活動之間的秒數 – 2013-03-11 15:05:45