このMySqlテーブルとそのデータがあります:
CREATE TABLE IF NOT EXISTS `invoices` (
`invoice_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`invoice_owner` int(11) NOT NULL,
`customer_id` int(11) NOT NULL,
`invoice_no` int(11) NOT NULL,
`invoice_date` date NOT NULL,
`invoice_due_date` date NOT NULL,
`invoice_status` enum('open','cancelled','overdue','closed','archived') NOT NULL,
`tax1_desc` varchar(50) NOT NULL,
`tax1_rate` float(6,3) NOT NULL,
`tax2_desc` varchar(50) NOT NULL,
`tax2_rate` float(6,3) NOT NULL,
`invoice_total` float(11,2) NOT NULL DEFAULT '0.00',
`invoice_notes` text,
PRIMARY KEY (`invoice_id`),
KEY `customer_invoice` (`customer_id`,`invoice_no`),
KEY `invoice_owner` (`invoice_owner`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1005 ;
INSERT INTO `invoices` (`invoice_id`, `invoice_owner`, `customer_id`, `invoice_no`, `invoice_date`, `invoice_due_date`, `invoice_status`, `tax1_desc`, `tax1_rate`, `tax2_desc`, `tax2_rate`, `invoice_total`, `invoice_notes`) VALUES
(999, 1, 0, 999, '2012-12-13', '2013-01-13', 'archived', '', 0.000, '', 0.000, 255.48, NULL),
(1000, 1, 0, 1000, '2013-04-14', '2013-05-14', 'cancelled', '', 0.000, '', 0.000, 105.28, NULL),
(1001, 1, 0, 1001, '2013-04-13', '2013-05-13', 'closed', '', 0.000, '', 0.000, 202.33, NULL),
(1002, 1, 0, 1002, '2013-04-15', '2013-05-14', 'open', '', 0.000, '', 0.000, 1113.85, NULL),
(1003, 1, 0, 1003, '2013-03-25', '2013-04-25', 'overdue', '', 0.000, '', 0.000, 114.75, NULL),
(1004, 0, 0, 1004, '2013-02-28', '2013-03-28', 'overdue', '', 0.000, '', 0.000, 2890.56, NULL);
私は3つの合計を与える選択をしなければなりません:
延滞請求書の合計
Invoice_status = 'overdue' の請求書から SUM (invoice_total) AS overdue を選択
1 ~ 30 日間の延滞の合計を取得する
Invoice_status = 'overdue' AND Invoice_due_date BETWEEN Invoice_due_date+1 AND Invoice_due_date+30 の請求書から SUM (invoice_total) AS overdue を選択
延滞の合計が 30 日を超えている
Invoice_status = 'overdue' AND 請求書_due_date >= 請求書_due_date+31
もちろん、合計延滞 = 延滞 1 ~ 30 日 + 延滞 30 日以上
質問: 1 つの SQL クエリですべてを行うにはどうすればよいですか?
3 つの数字を返す必要があります: 合計延滞、延滞 1 ~ 30、延滞 30 以上