我正在尝试显示一张桌子上的公司列表,这些公司将在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天内成功显示所有到期的,这是正确的。
期望的结果是它显示发票01在30天内到期,这是它正在做的,但是当我创建发票02而Next_due单元格是未来12个月的日期时,我希望它不会显示发票01已经到期了,因为Prac_ID有一个更新的行和更新的发票。
答案 0 :(得分:0)
通过在子查询中添加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