簡體   English   中英

多行上的條件SQL查詢

[英]Conditional SQL Query on Multiple Rows

我試圖找出哪些客戶拖欠了他們的貸款。 我想查詢數據集以找到最近60天內未付款的客戶的User_id ,但不確定如何在SQL中實現。

User_id    Due_Date                Loan_Amount    Paid_Amount
1          2012-04-04 16:14:12    500            40
1          2012-05-04 16:14:12    500            40
1          2012-06-04 16:14:12    500            0
1          2012-07-04 16:14:12    500            0
1          2012-08-04 16:14:12    500            0
2          2012-02-15 03:30:55    2030           100
2          2012-03-15 03:30:55    2030           100
2          2012-04-15 03:30:55    2030           100
3          2012-01-03 12:24:42    777            10
3          2012-02-03 12:24:42    777            0
3          2012-03-03 12:24:42    777            0
3          2012-04-03 12:24:42    777            0

用偽代碼(以粗體顯示)看起來像這樣,但是我似乎無法在MySQL中實現它:

從TABLE_NAME中選擇User_id,其中Loan_Amount> 0 AND [[Paid_Amount] 的值在60天內為空 ]

所需的輸出:將返回上述查詢中的用戶1和3,因為他們連續三個期間都沒有付款。

注意:Due_Date是一個時間戳

任何想法將不勝感激!

看起來您可以使用DATEDIFF(date1, date1)函數獲取拖欠借款人的列表。

SELECT DISTINCT
     user_id
FROM table_name n
     JOIN (SELECT user_id, max(due_date) maxDate FROM table_name GROUP BY user_id) t 
          ON n.user_id = t.user_id 
         AND n.due_date = t.maxDate
WHERE 
     loan_amount > 0
     AND paid_amount IS NULL
     AMD DATEDIFF(due_date, getdate()) > 60  

我之前的查詢有誤,請嘗試

select distinct t1.User_id
from TABLE_NAME t1
    inner join (
        select ts1.User_id, sum(ts1.Paid_Amount) as Paid_Amount_Total
        from TABLE_NAME ts1
        group by ts1.User_id
    ) t2
        on t1.User_id=t2.User_id and t1.Loan_Amount>t2.Paid_Amount_Total
)
where
    t1.Loan_Amount > 0
    and t1.User_id not in (
        select ts2.User_id
        from TABLE_NAME ts2
        where ts2.Due_Date>=DATE_SUB(NOW(), INTERVAL 60 DAY) and ts2.Paid_Amount>0
    )

t1,ts1,ts2-是TABLE_NAME的別名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM