2

我有 2 个不同的表:
dossiers (id, name, disp)
dossiers_etat (id, id_dossier, open, incharge, date)

dossiers 很简单,就是一个名字列表和他们的id

dossiers_etat 以 1-N 的关系链接到档案:1 个档案可以链接到 N 个档案-etat,这要归功于一个连接:dossiers.id = dossiers_etat.id_dossier

我使用 dossiers_etat 作为时间线来记录我的档案状态的每一次变化:今天可以打开 1 个档案=“Y”,但昨天可以打开=“N”
由于 dossiers_etat.date 或 dossiers_etat,我可以找到有关档案的最后一条记录.id(最后一个日期和最后一个 id 显示最近的记录)

如何完成此查询以获取其 LAST 记录中 open="Y" 和 incharge="-" 的档案列表?

SELECT *
FROM dossiers
JOIN dossiers_etat
ON dossiers.id = dossiers_etat.id_dossier
WHERE dossiers.disp = "Y" AND dossiers_etat.open = "Y" AND dossiers_etat.incharge = "-"
ORDER BY dossiers.id DESC

非常感谢您的帮助!

4

3 回答 3

1

试试这个

SELECT *
FROM dossiers
JOIN dossiers_etat
ON dossiers.id = dossiers_etat.id_dossier
WHERE dossiers.disp = "Y" AND dossiers_etat.open = "Y" AND dossiers_etat.incharge = "-"
ORDER BY dossiers.id DESC
limit 1
于 2013-02-01T11:07:50.777 回答
1

试试这个:

SELECT *
FROM dossiers B
JOIN dossiers_etat as C
ON B.id = C.id_dossier
WHERE B.disp = "Y" AND C.open = "Y" AND C.incharge = "-"
AND C.date = (SELECT max(date) from dossiers_etat WHERE id_dossier = C.id_dossier)
ORDER BY B.id DESC
于 2013-02-01T11:12:00.077 回答
1

试试这个:

    SELECT 
    *
FROM
    dossiers
        JOIN
    dossiers_etat ON dossiers.id = dossiers_etat.id_dossier
WHERE
    dossiers.disp = 'Y'
        AND dossiers_etat.open = 'Y'
        AND dossiers_etat.incharge = '-'
        AND dossiers_etat.id = (SELECT 
            *
        FROM
            dossiers_etat
        GROUP BY id_dossiers
        ORDER BY date DESC)
ORDER BY dossiers.id DESC;

使用子选择,您将从档案表中的最后一个条目中获取 id。使用外部 SELECT 您将获得所有行,这些行打开正确的条目并且也在最后的记录中。

于 2013-02-01T11:18:08.317 回答