内部加入和左侧组合以从组中获取最后一行

时间:2016-06-22 14:40:37

标签: php mysql join

我有一个包含多个表的数据集,我需要将它们链接在一起以获得所需的输出。

表1 - house_house

house_id | Name | address | zipcode

表2 - house_price

ID | house_id | price | status_id

表3 - house_status

ID | name

在表2中,每个huis_id有多个条目,包含价格和/或状态的变化。在我正在尝试构建的查询中,我想获得最小/最大prijs以及最新的已知状态。

因为我总是希望使用表1来全面了解所有位置,并尝试通过左连接将其他表连接到此表。

对于状态我需要一个子查询,我在内连接中构建。我遇到的挑战是,当我在价格表上运行内部连接时,它工作得很好,但是在左边加入价格之后将它组合在房子桌上,我很难让它工作,这很有意义,因为我'我试图将表格链接在一起,这是目前无法实现的。

当我用自己的想法碰到砖墙时,任何有关如何使这项工作的建议都受到欢迎。

查询:

SELECT 
     h.address, h.zipcode, p.huis_id, p.status 
FROM 
    house_house h
INNER JOIN 
    (SELECT 
        house_id, status, max(id) as id 
    FROM
        house_price 
    GROUP BY 
        house_id) p1 
ON 
    p.house_id = p1.house_id AND 
    p.id = p1.id
LEFT JOIN 
        house_price p ON p.house_id = h.house_id
GROUP BY 
    p.house_id

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT hh.house_id
     , hh.name
     , hh.address
     , hh.zipcode
     , hp.ID
     , hp.price
     , hp.status_id
     , hs.name 
  FROM house_house hh 
  LEFT 
  JOIN house_price hp 
    ON hh.house_id = hp.house_id 
  LEFT 
  JOIN house_status hs 
    ON hp.ID=hs.ID

答案 1 :(得分:0)

select * 
from 
(
SELECT h.*, p.*
     , row_number() over (h.house_id order by p.price desc) as hp
     , row_number() over (h.house_id order by p.price asc) as lp
     , row_number() over (h.house_id order by p.is desc) as s
FROM  house_house h
JOIN house_price p
on p.house_id = h.house_id
) tt 
where tt.hp = 1 or tt. lp = 1 or tt.s = 1