我想要一个sql查询,它在两个月的日期之间进行选择。
比如在下个月的15号到15号之间。
这是为了会计目的
我知道每个月有不同的天数加上30天或31天的开始日期将不会工作,特别是在2月。我的会计运行是从每月15日到下个月15日。
我对所选日期的当前查询如下

SELECT * FROM lbs_trace_etrack WHERE lbs_date  >=  '" . $dates . "'
AND lbs_date  <= '" . $datee . "' AND lbs_client='$slcustom1' ORDER BY lbs_date DESC, lbs_time DESC

LBS U日期开始应为每月15日,LBS U日期结束应为下个月15日
把日期定义为以下工作,但它给我的日期是从11月到现在,我希望从本月15日开始,因为我们已经过了本月15日
$first = date('Y-m-15', strtotime("$last -1 month"));
$last = date('Y-m-t');

以及询问
SELECT * FROM lbs_trace_etrack WHERE lbs_date  >=  '" .
$first . "'
AND lbs_date  <= '" . $last . "' ORDER BY lbs_date DESC

基本上,当我们通过本月15号时,我需要它来显示从当前15号到现在的当前使用情况,而不是前一个月15号

最佳答案

如果你真的想要我理解的你想要的,

   SELECT l.*
     FROM lbs_trace_etrack l
     JOIN (SELECT s.cd, CASE
             WHEN s.cd >= DATE(DATE_FORMAT(s.cd,'%Y-%m-15'))
             THEN DATE(DATE_FORMAT(s.cd,'%Y-%m-15'))
             ELSE DATE_SUB(DATE(DATE_FORMAT(s.cd,'%Y-%m-15')), INTERVAL 1 MONTH)
               AS start_date
             FROM (SELECT CURDATE() cd) s) d
       ON (TRUE)
    WHERE l.lbs_date  >= d.start_date
      AND l.lbs_date  < d.cd
      AND l.lbs_client = '$slcustom1'
 ORDER BY l.lbs_date DESC, l.lbs_time DESC;

请注意,这里还有php变量$slcustom1
带subselect的join的动机是只需要调用一次CURDATE(),以避免在两次后续调用之间更改日期的罕见情况。
请检查比较<>=等是否符合您的要求。
编辑:
我已将start_date的计算移到联接表中。即使这样我必须调用DATE(DATE_FORMAT())三次,也比计算每行的DATE_SUB要好,如果我们是在上半月的话。

10-07 16:35
查看更多