에서에서 조인 행에 조건 : 지금은 foreign_id
열 orders
와 activities
에 가입해야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 |
+------+---------------------+------------+------+
을 : 모든 주문 등을 위해 (있는 경우) 하나의 작업을 선택 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을 사용하지 않는 것이 좋습니다. 당신이 원하는 무엇을
이 줄은 : ABS (TIMESTAMPDIFF (SECOND, orders.created_at, activities.created_at))'? –
이 값을 최소화하고 싶습니다. 예 : 주문이 11:00에 생성되고 3 개의 활동 (1, 09:00), (2, 10:00), (3,11:00), (3, 12:00)이있는 경우, 세 번째 활동. 그 줄은 창조 또는 주문과 활동 사이의 초를 반환합니다. –