0

我真的需要帮助通过一个查询来解决这个问题。

我有四张桌子:

[Assets]
[id | serial_number | date_created] (other stuff)

[Parts]
[id | unit_number | date_created] (other stuff)

[Groups]
[id | asset_id | part_id | date_created] (other stuff)

[Activity]
[id | group_id | date_recorded | action_id] (other stuff)

如何选择所有资产并找到它们最近的配对(组)以及在该组中的最新活动。在一个记录行中。

编辑:我尝试过的:

  1. 我这样做了,php但它非常难看,需要三个单独的查询。

  2. 我通过单独的从每个表中选择了所有属性SELECT,我认为这是一种可怕的方式

    SELECT
        *,
        (
            SELECT
                part_id
            FROM
                groups
            ORDER BY
                date_created 
            DESC
            LIMIT 1
        ) AS part_id
    FROM
        assets
    

为了抓住part_id我做一个嵌套选择,但如果我需要 9 个属性,我需要 9 个嵌套选择,这是一个不好的方法?

4

1 回答 1

0

您的查询建议如下:

SELECT *
FROM assets a cross join
     (select *
      from groups
      order by date_created
      limit 1
     ) g

但是,我怀疑您可能真的想在某个字段(组 ID?部分 ID?)上加入资产和组,并根据该字段选择最近的记录。以下查询执行此操作,假设部分是匹配字段:

SELECT *
FROM assets a join
     (select *
      from groups g join
           (select g.part_id, max(date_created) as maxdate
            from groups g
            group by g.part-id
           ) gmax
           on g.part_id = gmax.part_id and
              g.date_created = gmax.maxdate
     ) g
     on a.parts_id = g.parts_id
于 2012-07-24T17:32:38.367 回答