簡體   English   中英

mysql:分組並獲取最新記錄

[英]mysql: group by and get latest record

我有這樣的查詢:

SELECT cus_id, ROUND(SUM(credit_in)-SUM(credit_out), 2) as balance, date_added
FROM `customer_wallet`
GROUP BY cus_id

它將獲得客戶的余額(唯一的客戶)。 如果余額為負,我想修改此值,然后我想要最新日期( date_added )。

我嘗試這樣做:

SELECT cus_id, ROUND(SUM(credit_in)-SUM(credit_out), 2) as balance, date_added
FROM `customer_wallet`
GROUP BY cus_id
ORDER BY date_added

但是,它會在得到所有結果后給出排序的記錄。 我想要個人客戶的最新記錄。

讓我知道您是否需要更多信息或架構。 謝謝。

我也可以在php查看余額為負的記錄。 但是,如果我可以在查詢本身中做到這一點,那就太好了。

您需要使用聚合函數來選擇最近的日期-我相信默認值是mysql只為該列選擇一個隨機值。

SELECT cus_id, 
       ROUND(SUM(credit_in)-SUM(credit_out), 2) as balance, 
       max(date_added) as most_recent
FROM `customer_wallet`
Having SUM(credit_in) < SUM(credit_out)
GROUP BY cus_id

默認情況下,MYSQL不會強制您將未包含在聚合函數中的所有列都放在Group By子句中。 這會返回奇怪的結果。

請嘗試以下查詢。

  SELECT cus_id, 
         ROUND(SUM(credit_in)-SUM(credit_out), 2) as balance, 
         max(date_added) latest_transaction_date
    FROM `customer_wallet`
GROUP BY cus_id
  HAVING ROUND(SUM(credit_in)-SUM(credit_out), 2) < 0

如果您想了解有關MySQL中Group By依據的更多信息,可以查看此博客文章: Debunking GROUP BY myths 它已經很老了,但是如果您是MySQL的新手,它仍然很有趣。

從您的問題尚不清楚,但是我假設您想要個人的負余額及其最后交易的日期。

SELECT cus_id, ROUND(SUM(credit_in)-SUM(credit_out), 2) as balance, max(date_added) as last_date
FROM `customer_wallet`
HAVING ROUND(SUM(credit_in)-SUM(credit_out) < 0
GROUP BY cus_id
ORDER BY last_date

如果您不只是想要負余額,請使用以下命令:

SELECT cus_id, ROUND(SUM(credit_in)-SUM(credit_out), 2) as balance, max(date_added) as last_date
FROM `customer_wallet`
GROUP BY cus_id
ORDER BY last_date

所以我在這里做一些假設(我也看到了sql標記,所以我希望sql中的答案會有所幫助):

您有一個客戶表:cust_id是主鍵,並且給定的客戶只有一行專用於他們

您有一個帶積分的錢包表。 cust_id是一個外鍵,任何客戶在此表中都可以有多行。 WalletId是此表中的主鍵,並且最近的事務具有最高數量

僅返回cust_id時很難做到這一點。 如果您不反對返回額外的1列,則可以輕松完成此操作(walletid)。 您只需要將導入日期添加到group子句中,並針對walletid使用max函數。

SELECT cus_id, MAX(walletid), ROUND(SUM(credit_in)-SUM(credit_out), 2) as balance, date_added
FROM customer_wallet
GROUP BY IssuerId, date_added
ORDER BY date_added

暫無
暫無

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

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