簡體   English   中英

聚合現有查詢以適用於多行

[英]Aggregating existing query to work for multiple rows

我有一個分類帳表,現在我有能力找到日期或NULL,如果有人根據他們的付款記錄拖欠。 我需要一個查詢,允許我找到所有逾期成員而不是特定成員。

我需要能夠運行一個查詢,獲取任何拖欠的成員並返回給我member_id和拖欠日期。

基本上是為特定成員找到拖欠的原始查詢,只做每個成員而不是特定成員。

我努力了:

SELECT DISTINCT member_id, created_at FROM member_ledger_items WHERE 
balance > 0 and id > (
    IFNULL(
        (SELECT id from member_ledger_items WHERE balance <= 0 and member_ledger_items.deleted_at is NULL GROUP BY member_id ORDER BY created_at, id desc LIMIT 1),
        0
    )
) and `member_ledger_items`.`deleted_at` is null GROUP BY member_id order by created_at asc, id asc;

這是查找特定成員是否拖欠的查詢:

select `created_at` from `member_ledger_items` where `member_id` = ? and `balance` > 0 and `id` > 
(
IFNULL(
(select `id` from `member_ledger_items` where `member_id` = ? and `balance` <= 0 and `member_ledger_items`.`deleted_at` is null order by `created_at` desc, `id` desc limit 1)
, 0)
) 
and `member_ledger_items`.`deleted_at` is null order by `created_at` asc, `id` asc limit 1;

以下是member_ledger_items表的創建語法:

CREATE TABLE `member_ledger_items` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `member_id` int(10) unsigned NOT NULL,
  `status` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `type` enum('credit','debit') COLLATE utf8_unicode_ci NOT NULL,
  `category` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `memo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `amount` decimal(13,3) DEFAULT NULL,
  `autopay` tinyint(1) DEFAULT NULL,
  `late` tinyint(1) DEFAULT NULL,
  `date` date NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `balance` decimal(13,3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=53596 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我需要有member_id的行和開始拖欠的日期。

這可能嗎?

任何幫助,將不勝感激!

SELECT `member_id`, 
       (SELECT `created_at` 
        FROM   `member_ledger_items` AS MLI2 
        WHERE  `balance` > 0 
               AND MLI2.`member_id` = MLI.`member_id` 
               AND `id` > ( Ifnull((SELECT `id` 
                                    FROM   `member_ledger_items` AS MLI3 
                                    WHERE  `balance` <= 0 
                                           AND MLI3.`member_id` = 
                                               MLI2.`member_id` 
                                           AND MLI3.`deleted_at` IS NULL 
                                    ORDER  BY `created_at` DESC, 
                                              `id` DESC 
                                    LIMIT  1), 0) ) 
               AND MLI2.`deleted_at` IS NULL 
        ORDER  BY `created_at` ASC, 
                  `id` ASC 
        LIMIT  1) AS created_date 
FROM   `member_ledger_items` AS MLI 
GROUP  BY `member_id`; 

結束了解決方案

暫無
暫無

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

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