mysql 多表 group,使用“GROUP BY”连接多个表和MySQL的最新日期

i have 2 mysql tables

table 1 is "qualitaet-inventar" and has 3000 rows with "sachnummer" as AUTO_INCREMENT

7c1b5605e708ac80e0d8b9b0c7e9e18a.png

table 2 is "qualitaet" and has a couple of rows.. here is "id" set to AUTO_INCREMENT

the important thing is that "sachnummer" can be exist many times. (see the red marks in picture)

bb3ab342584b12f473dc1d7c5ffde208.png

what i want to do is a left join from "qualitaet" to "qualitaet-inventar"

i want to group all "sachnummer" by showing the latest date of "created" on "qualitaet"

and when a "sachnummer" isn't available in "qualitaet" do an empty join to "qualitaet-inventar"

so i have this code

SELECT

i.`sachnummer` AS id,

MAX(q.`created`) AS letztemessung,

i.`sachnummer-name` AS sachnummer

FROM

`qualitaet-inventar` i

LEFT JOIN

`qualitaet` q on i.`sachnummer` = q.`sachnummer`

GROUP BY

sachnummer

ORDER BY

sachnummer ASC

the problem is that it needs a long time to get this result

e9567f0a647c3957e5a477f1be399d98.png

with this code it works faster

SELECT

q.`sachnummer` AS id,

MAX(q.`created`) AS letztemessung,

i.`sachnummer-name` AS sachnummer

FROM

qualitaet q

LEFT JOIN

`qualitaet-inventar` i on q.`sachnummer` = i.`sachnummer`

GROUP BY

sachnummer

ORDER BY

sachnummer ASC

but i don't get the hole inventory and an empty date with this code

d0523684eeb439fff1d119ce34081b61.png

is it possible to get this table in a faster way for high table-rows? :D

1f02aef99cba5631ac56726c6adc0f2a.png

edit:

here are my indexes

79aa744822fa92f9dec78730235d8bfb.png

解决方案

The following shouldn't work any faster than your existing query - but from your description, may do:

SELECT i.`sachnummer` AS id,

MAX(q.`created`) AS letztemessung,

i.`sachnummer-name` AS sachnummer

FROM `qualitaet-inventar` i

JOIN `qualitaet` q on i.`sachnummer` = q.`sachnummer`

GROUP BY sachnummer

UNION ALL

SELECT i.`sachnummer` AS id,

q.`created` AS letztemessung,

i.`sachnummer-name` AS sachnummer

FROM `qualitaet-inventar` i

LEFT JOIN `qualitaet` q on i.`sachnummer` = q.`sachnummer`

WHERE q.`sachnummer` IS NULL

ORDER BY sachnummer ASC

Another possibility:

select id, max(letztemessung) as letztemessung, max(sachnummer) as sachnummer

from

(SELECT `sachnummer` AS id,

`created` AS letztemessung,

'' AS sachnummer

FROM `qualitaet` q

UNION ALL

SELECT `sachnummer` AS id,

cast(null as datetime) AS letztemessung,

`sachnummer-name` AS sachnummer

FROM `qualitaet-inventar` i

) sq

group by id

ORDER BY sachnummer ASC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值