2015-01-06 159 views
1

我有一個用來計算金錢的MySQL數據庫。我有兩張桌子:平衡和金錢。MySQL查詢LIMIT

在money table中有兩列:id(它是AUTO_INCREMENT和PRIMARY)和name。這表現在包含:

1 | Card 
2 | Cash 

在資產負債表中有三列:ID(這是AUTO_INCREMENT和PRIMARY),平衡時間和money_id。該表包含現在:

1 | 200 | 2014-01-03 03:04:00 | 2 
2 | 150 | 2014-01-03 03:08:00 | 2 
3 | 400 | 2014-01-03 03:10:00 | 1 
4 | 300 | 2014-01-03 03:12:00 | 1 
5 | 100 | 2014-01-03 03:14:00 | 2 
5 | 150 | 2014-01-03 03:16:00 | 2 

所以在這個時候有100現金和300卡。我想要一個頁面顯示,如:

Cash 100 
Card 300 

但我有問題創建此查詢。我有一個查詢,但它不工作,它應該是如何工作的:

SELECT 
    money.name, 
    balance.balance, 
    balance.time, 
    money.id, 
    balance.id 
FROM 
    money, 
    balance 
WHERE 
    money.id = balance.money_id 
ORDER BY 
    balance.time DESC 

這將打印:

Cash 150 
Cash 100 
Card 300 
Card 400 
Cash 150 
Cash 200 

但我想每money.name只有一個值,那是什麼按平衡排序。我試圖限制1,但它只是打印:

Cash 150 

限制2沒有也行,因爲它打印:

Cash 150 
Cash 100 

任何想法?

對不起,英語不好,那不是我的母語。 :d

+0

我投票決定關閉BEC因爲這太寬泛了,我的意思是'太基本' – Strawberry

+0

聽起來像你想要一個組,但我不理解你的用例,爲什麼你不想使用限制?最有可能的是 –

+0

組。嘗試重新組織任務 – volkinc

回答

1

試試這個:

SELECT m.name, b.balance 
FROM money m 
INNER JOIN balance b ON m.id = b.money_id 
INNER JOIN (SELECT b.money_id, MAX(b.time) AS `time` 
      FROM balance b 
      GROUP BY b.money_id 
      ) AS A ON b.money_id = A.money_id AND b.time = A.time; 

檢查SQL FIDDLE DEMO

輸出

| ID | NAME | BALANCE | 
|----|------|---------| 
| 1 | Card |  300 | 
| 2 | Cash |  150 | 
+0

這些A.x到底是什麼? MySQL說未知列。 如果A與m相同,則不存在m.time,只是b.time。 – codah

+0

@ Saharsh Shah)AS A ON b.money_id = A.money_id和b.time = A.time; 這些A.money_id和A.time – codah

0

使用此SQL

SELECT a.name, COUNT(*) 
FROM money a join balance b 
WHERE a.id = b.money_id 
GROUP BY a.name 
+0

該查詢沒有顯示餘額,所以我編輯了第一行到這個: SELECT b.balance,a.name,COUNT(*) 但它的問題,它沒有得到最後的平衡時間。所以平衡是錯誤的。 – codah

+0

這是最初提出的問題的正確答案。但自那以後,這個問題發生了很大變化,這是不幸的。 – Strawberry