获取上个月关于sql server当前月份的所有记录

时间:2017-02-03 15:51:09

标签: sql-server database

我必须使用两个表payment_tbl和bill_tbl以及以下属性

payment_tbl (payment_ID int -> pk)
bill_tbl (payment_ID int -> Fk
         ,bill_IssueDate date
         ,bill_status varchar
         ,bill_amount type int
         )

所以如果我想知道哪个payment_ID有帐单状态'未支付'在上个月相对于当月,让现在月份是2017年2月我想知道在2017年1月谁没有支付比尔。

我尝试了以下查询,但它返回空列名称

SELECT p.payment_ID
      ,b.amount_To_Pay
FROM bill_tbl AS b
    INNER JOIN payment_tbl AS p
        ON b.payment_id = p.payment_ID
WHERE b.bill_status = 'Not Paid'
    AND b.bill_IssueDate >= DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0)
    AND b.bill_IssueDate < DATEADD(mm, DATEDIFF(mm, 0,  GETDATE()) + 0, 0)

2 个答案:

答案 0 :(得分:0)

您需要查看当前和前几个月的第一个月,并将范围设置为该值。

select 
    p.payment_ID, 
    b.amount_To_Pay 
FROM 
    bill_tbl AS b 
    INNER JOIN payment_tbl AS p ON 
    b.payment_id = p.payment_ID 
WHERE
    (b.bill_status = 'Not Paid')
    and b.bill_IssueDate < DATEADD(month, DATEDIFF(month, 0, getdate()), 0)
    and b.bill_IssueDate >= DATEADD(month, DATEDIFF(month, 0, dateadd(month,-1,getdate())), 0)

答案 1 :(得分:0)

应该简单 -

SELECT p.payment_ID
  ,b.amount_To_Pay
FROM bill_tbl AS b
INNER JOIN payment_tbl AS p
    ON b.payment_id = p.payment_ID
WHERE b.bill_status = 'Not Paid'
AND DATEDIFF(month, b.bill_IssueDate ,getdate()) = 1

你还有其他错误,你的日期范围还可以,摆脱一些WHERE条款,看看那些月份是否确实存在任何数据 - 我不认为这是你的日期范围