我正在尝试从表中显示公司列表,这些公司应在30天内发送新发票,但是我遇到的问题是,当我创建新发票时,它们仍保留在列表中,我希望它们即将被删除。

sw_practices contains公司信息

sw_invoices contains各自的发票数据

我当前的查询是:

SELECT
    *
FROM
    SW_PRACTICES    AS  P
JOIN
    (
        SELECT
            *
        FROM
            SW_INVOICES
    )AS I
ON
    P.PRAC_ID   =   I.PRAC_ID
WHERE
    P.ACTIVE    =   '2'
AND I.NEXT_DUE  >   NOW()   -   INTERVAL    7   DAY
AND I.NEXT_DUE  <   NOW()   +   INTERVAL    30  DAY
ORDER BY
    I.INV_ID    ASC


因此,这成功显示了30天内的所有到期款项,这是正确的。

期望的结果是它显示发票30在30天内到期,这是正在做的事情,但是当我创建发票02并且Next_due单元格是将来12个月的日期时,我希望它不显示发票01由于Prac_ID的行已更新且发票较新,因此到期。

最佳答案

通过在子查询中添加WHERE Inv_ID IN (SELECT MAX...进行排序,完整查询为:

SELECT *
FROM sw_practices as p
JOIN (
    SELECT *
    FROM sw_invoices
    WHERE Inv_ID IN (
        SELECT MAX(Inv_ID)
        FROM sw_invoices
        GROUP BY Prac_ID
    )
) as i
ON p.Prac_ID = i.Prac_ID
WHERE p.Active = '2'
AND i.Next_due > NOW() - INTERVAL 7 DAY
AND i.Next_due < NOW() + INTERVAL 30 DAY
ORDER BY i.Inv_ID ASC

关于mysql - MySQL查询以选择要在30天内开具发票的公司,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48342365/

10-16 02:08