簡體   English   中英

MySQL按子查詢列排序

[英]MySQL Order by subquery column

我有SQL查詢的問題。 我們的想法是選擇所有在付款后的狀態(狀態1/2/3)在8到21天之間的貸款,以及來自payment_day的計算值。

我已經完成了一些查詢,但不能在WHERE部分使用列days_after_payment和days_after_part_payment。 我想根據貸款類型有一個像days_after_payment這樣的列。

SELECT l.*,
(SELECT SUM(`value`) FROM `loan_part` WHERE `loan_id` = l.id AND `paid`=0) AS left_to_pay, 
-(DATEDIFF((SELECT date FROM `loan_part` WHERE `loan_id` = l.id AND `paid`=0 AND `date`<CURDATE() ORDER BY `date` LIMIT 1), NOW())) AS days_after_part_payment,
-(DATEDIFF(l.payment_date, NOW())) AS days_after_payment
FROM loan l
WHERE (l.type=1 or l.type=2) AND (l.status=1 OR l.status=2 OR l.status=3)
GROUP BY l.client_id
ORDER BY 
CASE l.type 
    WHEN 1 THEN days_after_payment
    WHEN 2 THEN days_after_part_payment
    ELSE 1 END 
ASC

CREATE TABLE IF NOT EXISTS `loan` (
  `id` int(11) NOT NULL,
  `value` int(11) NOT NULL,
  `client_id` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  `payment_date` date DEFAULT NULL  
) ENGINE=MyISAM AUTO_INCREMENT=2068 DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `loan_part` (
`id` int(10) unsigned NOT NULL,
  `loan_id` int(11) NOT NULL,
  `value` float NOT NULL,
  `date` date DEFAULT NULL,
  `paid` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=MyISAM AUTO_INCREMENT=1751 DEFAULT CHARSET=utf8;

Update1:​​我不得不刪除不必要的列,並用我的母語將其重寫為英語。

ORDER BY 7

“7”表示SELECT中的第7個字段。 這也適用於GROUP BY 我必須看到表定義來計算l.*

為什么id沒有聲明AUTO_INCREMENT

暫無
暫無

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

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