代码之家  ›  专栏  ›  技术社区  ›  Adrian

MySQL为表中的每个ID选择最新的1行

  •  0
  • Adrian  · 技术社区  · 7 年前

    我有一个名为sw\U practice的表,其中填充了组织,还有一个名为sw\U invoices的表,其中包含每个组织的发票数据。

    在sw\U发票中,可能有多个发票(有一个增量唯一ID列)与具有自己ID(Prac\U ID)的组织链接。

    我正在尝试获取所有组织的列表(无论它们是否已开票),但每个组织只有一个条目,因此如果它们已开票,则只显示最新的条目。

    我尝试过:

    SELECT * FROM sw_practices as p LEFT JOIN sw_invoices as i ON p.Prac_ID = i.Prac_ID WHERE p.Active = '2' ORDER BY i.Inv_ID DESC LIMIT 1
    

    但这只显示了其中最新的一行。

    如果我从末尾删除限制1,它会显示所有数据,但会显示一些组织的多个条目。

    我希望查询显示“从sw\U practices中全选,其中Active=2,并显示其发票数据,但仅显示每个不同Prac\U ID的最新1”

    1 回复  |  直到 7 年前
        1
  •  1
  •   tyro    7 年前

    使用分组依据:

    SELECT * FROM sw_practices as p LEFT JOIN (Select * FROM sw_invoices ORDER BY Prac_ID DESC )as i ON p.Prac_ID = i.Prac_ID WHERE p.Active = '2' GROUP BY p.Prac_id