MySQL 查询 LIMIT
MySQL query LIMIT
我有一个 MySQL 数据库用于计算金钱。我有两个 table:余额和钱。
money table 中有两列:id(即 AUTO_INCREMENT 和 PRIMARY)和 name。 table 现在包含:
1 | Card
2 | Cash
余额table中有三列:id(即AUTO_INCREMENT和PRIMARY)、余额、时间和money_id。 table 现在包含:
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 有一个值,并且按 balance.time 排序。我试过限制 1,但它只打印:
Cash 150
限制 2 也不起作用,因为它打印:
Cash 150
Cash 100
有什么想法吗?
抱歉英语不好,那不是我的母语。 :D
使用这个SQL
SELECT a.name, COUNT(*)
FROM money a join balance b
WHERE a.id = b.money_id
GROUP BY a.name
试试这个:
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;
输出
| ID | NAME | BALANCE |
|----|------|---------|
| 1 | Card | 300 |
| 2 | Cash | 150 |
我有一个 MySQL 数据库用于计算金钱。我有两个 table:余额和钱。
money table 中有两列:id(即 AUTO_INCREMENT 和 PRIMARY)和 name。 table 现在包含:
1 | Card
2 | Cash
余额table中有三列:id(即AUTO_INCREMENT和PRIMARY)、余额、时间和money_id。 table 现在包含:
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 有一个值,并且按 balance.time 排序。我试过限制 1,但它只打印:
Cash 150
限制 2 也不起作用,因为它打印:
Cash 150
Cash 100
有什么想法吗?
抱歉英语不好,那不是我的母语。 :D
使用这个SQL
SELECT a.name, COUNT(*)
FROM money a join balance b
WHERE a.id = b.money_id
GROUP BY a.name
试试这个:
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;
输出
| ID | NAME | BALANCE |
|----|------|---------|
| 1 | Card | 300 |
| 2 | Cash | 150 |