2017-02-03 52 views
-2

我有两个表payment_tbl和bill_tbl具有以下属性获得上个月的所有记录在SQL Server中对于当月

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) 

回答

0

你需要看第一当前和以前的两个月,你的范围设置为。 AS

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) 
+0

它回报我什么都没有,甚至我的帐单表有日期2/2/2017 12:00:00 AM这是一个月大 – mjunaid

+1

以及它现在是2月,所以上个月是一月.... @你说上个月你想要的mjunaid。 2/2/2017是不是一个月大,这是一天老 – scsimon

+0

ops,谢谢我得到解决方案 – mjunaid

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子句中,看看是否有其实是为那些任何数据个月 - 我不认为这是你的日期范围

+0

为什么它返回我空表? – mjunaid

+0

这将只返回部分月份数据...不是上个月这是OP想要的整个月份 – scsimon

+0

@mjunaid - 我不知道,还有其他错误我想,是你想要的记录实际上是状态是否正确? – Cato

相关问题