iT邦幫忙

0

MYSQL語法請教

http://ithelp.ithome.com.tw/upload/images/20160615/20090631wjH54xHkSN.jpg

如圖資料庫,以下是我個人想做個收支報表語法

SELECT
	DATE_FORMAT(`data`, '%Y-%m') 日期,
	SUM(CASE WHEN type IN ('現金提','金融卡') THEN cashout ELSE 0 END) ATM提領,
	SUM(CASE WHEN type = '中信卡' THEN cashout ELSE 0 END) 中國信託信用卡,
	SUM(CASE WHEN type = '跨行轉' AND note = '繳遠銀信用卡款' THEN cashout ELSE 0 END) 遠東商銀信用卡,
	SUM(CASE WHEN type = '委代扣' AND note = '台新銀行信用卡' THEN cashout ELSE 0 END) 台新銀行信用卡,
	SUM(CASE WHEN type = '電話費' THEN cashout ELSE 0 END) 電話及家裡網路,
	SUM(CASE WHEN type = '手續費' THEN cashout ELSE 0 END) 跨行手續費支出,
	balance 月結存,
	sum(cashout) 總支出,
	sum(cashin) 總收入
FROM
	banking
GROUP BY
	DATE_FORMAT(`data`, '%Y-%m')
ORDER BY
	`data` DESC

目前問題是balance 月結存這個我想撈每個月的最後一筆的balance欄位資料,就卡在這了= =,希望前輩們給些指點

看更多先前的討論...收起先前的討論...
badbayz iT邦新手 4 級 ‧ 2016-06-15 14:13:53 檢舉
SQL 測試範例檔案下載點 http://aquasss.com/banking.zip
badbayz iT邦新手 4 級 ‧ 2016-06-15 14:28:09 檢舉
SELECT
DATE_FORMAT(`data`, '%Y-%m') 日期,
SUM(CASE WHEN type IN ('現金提','金融卡') THEN cashout ELSE 0 END) ATM提領,
SUM(CASE WHEN type = '中信卡' THEN cashout ELSE 0 END) 中國信託信用卡,
SUM(CASE WHEN type = '跨行轉' AND note = '繳遠銀信用卡款' THEN cashout ELSE 0 END) 遠東商銀信用卡,
SUM(CASE WHEN type = '委代扣' AND note = '台新銀行信用卡' THEN cashout ELSE 0 END) 台新銀行信用卡,
SUM(CASE WHEN type = '電話費' THEN cashout ELSE 0 END) 電話及家裡網路,
SUM(CASE WHEN type = '手續費' THEN cashout ELSE 0 END) 跨行手續費支出,
balance 月初結存,
SUM(CASE WHEN id IN (SELECT MAX(id) FROM banking GROUP BY DATE_FORMAT(`data`, '%Y-%m')) THEN balance ELSE 0 END) 月底結存,
SUM(cashout) 總支出,
SUM(cashin) 總收入
FROM
banking
GROUP BY
DATE_FORMAT(`data`, '%Y-%m')
ORDER BY
`data` DESC

剛剛測試出來了@@,不過前輩們有更好的寫法讓我學習一下呢
我下班玩玩看,我之前好像寫過!
昨天看了一下SQL,跟我之前處理的方式差不多!!
不過我有看到一篇文章,蠻有趣的!
你可以參考一下,這個方式我在Oracle 有相關的方法可以用,
MySQL你可以參考以下文章使用看看
http://stackoverflow.com/questions/664700/calculate-a-running-total-in-mysql

1 個回答

3
賽門
iT邦超人 1 級 ‧ 2016-06-15 16:56:25

Select TOP 1 ....(你的Code)

我要發表回答

立即登入回答