SQL:如何在此查询中获取UniqueIdentifier列

时间:2019-06-30 15:01:02

标签: mysql sql

一些背景说明:
我有一些表格,想要获取每个职位的最低日期。 一个职位有多个存储日期的部门。

样品:
位置1具有
部门日期1:30.05.2019,
部门日期2:01.06.2019,
部门日期3:05.06.2019 ....等等

我在获取以下输出中的UniqueIdentifier列id_abteilungen时遇到问题:

Result of Query

用于获得上述结果的查询是这样的:

SQL

SELECT tbl_Auftrag.Auftragsnummer
     , tbl_Positionen.Bezeichnung
     , MIN(tbl_Positionen_Abteilungen.Abteilungstermin) AS Abteilungstermin
FROM tbl_Auftrag 
INNER JOIN tbl_Positionen 
ON tbl_Auftrag.auftrag_id = tbl_Positionen.id_auftrag 
INNER JOIN tbl_Positionen_Abteilungen 
ON tbl_Positionen.positionen_id = tbl_Positionen_Abteilungen.id_positionen
WHERE tbl_Positionen_Abteilungen.fertiggestellt = '0'
GROUP BY tbl_Positionen_Abteilungen.id_positionen
       , tbl_Auftrag.Auftragsnummer
       , tbl_Positionen.Bezeichnung

要获得此结果,我需要GROUP BY id_positionen。 我一试到GROUP BY id_positionen,id_abteilungen
结果将再次显示所有部门的所有职位及其日期。

Output with GROUP BY id_positionen, id_abteilungen

获得的结果必须是这样,但我根本不知道如何获得这个结果:

Output I wish like to have

如果对表以及主键和外键有疑问,或者您需要了解其他内容,请随时提问。我需要的只是正确的查询,以获取在位置中找到的每个最低日期的id_abteilungen唯一标识符,以及查询结果结果中显示的其他列。

1 个答案:

答案 0 :(得分:0)

您不应该在分组依据中使用tbl_Positionen_Abteilungen.id_positionen
取而代之的是,您应该选择将结果加入最小Abteilungstermin

    select  * 
    FROM tbl_Auftrag 
    INNER JOIN tbl_Positionen ON tbl_Auftrag.auftrag_id = tbl_Positionen.id_auftrag 
    INNER JOIN tbl_Positionen_Abteilungen ON tbl_Positionen.positionen_id = tbl_Positionen_Abteilungen.id_positionen
    INNER JOIN  (
        SELECT tbl_Auftrag.Auftragsnummer
            , tbl_Positionen.Bezeichnung
            , MIN(tbl_Positionen_Abteilungen.Abteilungstermin) AS Abteilungstermin
        FROM tbl_Auftrag 
        INNER JOIN tbl_Positionen ON tbl_Auftrag.auftrag_id = tbl_Positionen.id_auftrag 
        INNER JOIN tbl_Positionen_Abteilungen ON tbl_Positionen.positionen_id = tbl_Positionen_Abteilungen.id_positionen
        WHERE tbl_Positionen_Abteilungen.fertiggestellt = '0'
        GROUP BY  tbl_Auftrag.Auftragsnummer, tbl_Positionen.Bezeichnung
    ) t on t.Auftragsnummer = tbl_Auftrag.Auftragsnummer 
        and t.Bezeichnung =  tbl_Positionen.Bezeichnung 
        and t.Abteilungstermin = tbl_Positionen_Abteilungen.Abteilungstermin
    WHERE tbl_Positionen_Abteilungen.fertiggestellt = '0'