Sql 比较从日期、同一年或下一年提取的月份

Sql 比较从日期、同一年或下一年提取的月份,sql,ms-access,Sql,Ms Access,此SQL语句在去年运行良好,用于选择当前月份大于子查询Max month匹配ciient_id的数据。现在,子查询返回的Max month是12,无论是否比较今年的当前月份(1)。这就是SQL语句返回0记录的原因 我必须找出client_id,即当前月份子查询中不存在的客户。要么我可以和date比较。请帮我离开这里 SELECT c.id, p.pkg_rate AS amount FROM tbl_client AS c INNER JOIN tbl_package AS p ON c.pk

此SQL语句在去年运行良好,用于选择当前月份大于子查询Max month匹配ciient_id的数据。现在,子查询返回的Max month是12,无论是否比较今年的当前月份(1)。这就是SQL语句返回0记录的原因

我必须找出client_id,即当前月份子查询中不存在的客户。要么我可以和date比较。请帮我离开这里

SELECT c.id, p.pkg_rate AS amount
FROM tbl_client AS c 
INNER JOIN tbl_package AS p ON c.pkg_id = p.id
WHERE c.status=1 AND 
      Month(Date())>(SELECT Month(Max([due_month])) FROM tbl_payment_due WHERE 
      c.id=client_id);

一种方法是先将日期格式化为字符串

Format(Date(),"yyyymm") > (SELECT Format(Max([due_month]),"yyyymm") FROM tbl_payment_due WHERE c.id=client_id)
第二种选择是在WHERE子句中添加一个年份的检查注意:我的括号可能有点偏了

(Year(Now()) > (SELECT Year(Max([due_month])) FROM tbl_payment_due WHERE c.id=client_id)) OR 
((Year(Now()) = (SELECT Year(Max([due_month])) FROM tbl_payment_due WHERE c.id=client_id)) AND (Month(Date())>(SELECT Month(Max([due_month])) FROM tbl_payment_due WHERE c.id=client_id)))

我以前试过像你的第一个方法,但没有成功,现在它工作得很好,非常感谢你。