我在一张桌子上有一张办公室清单,还有一张每个办公室都有短期租约的清单。
我试图查询这两个表,以显示所有办公室的列表,以及已预订的最早租约和最后一次租约,以便在再次可用时使用。
SELECT offices.* ,MIN(lease.date_start), MAX(lease.date_end) FROM offices, lease WHERE lease.office_id = office.id ORDER BY office.id DESC办公桌:
id | office_name | office_description
1 | North York | Lorem Ipsum
2 | Toronto | Lorem Ipsum
3 | Richmond | Lorem Ipsum租赁表:
id | office_id | start_date | end_date
1 | 1 | 5 | 8
2 | 1 | 3 | 7
3 | 2 | 1 | 4 我想得到的结果是:
office_id=>1, start_date=>3, end_date=>8
office_id=>2, start_date=>1, end_date=>4
office_id=>3, start_date=>NULL, end_date=>NULL我将如何构造我的查询以获得结果?
发布于 2013-10-23 20:20:26
为了在本例中正确使用MIN()和MAX(),您需要使用GROUP BY
SELECT
office.*
MIN(lease.start_date),
MAX(lease.end_date)
FROM office AS office
LEFT JOIN lease AS lease ON (lease.office_id = office.office_id)
GROUP BY office.office_id
ORDER BY office.office_id DESC发布于 2013-10-23 20:21:07
SELECT CONCAT("office_id=>",O.id,", start_dt=>",B.start_dt,", end_dt=>",B.end_dt)
FROM
office O,
(
SELECT L.office_id,MIN(start_dt) AS start_dt,MAX(end_dt) AS end_dt
FROM Lease L
GROUP BY L.office_id
) B
WHERE O.id = B.office_id;发布于 2013-10-23 20:26:58
下面的选择应该会给出所需的结果:
SELECT o.*, min(l.date_start), max(l.date_end)
FROM offices o
LEFT JOIN lease l on (
l.office_id = o.id
)
GROUP BY o.idhttps://stackoverflow.com/questions/19551461
复制相似问题