MySQL查询限制

MySQL查询限制,mysql,sql,select,group-by,greatest-n-per-group,Mysql,Sql,Select,Group By,Greatest N Per Group,我有一个MySQL数据库,用来计算钱。我有两张桌子:余额和货币 在money表中有两列:id(它是AUTO_INCREMENT和PRIMARY)和name。该表现在包含: 1 | Card 2 | Cash 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 |

我有一个MySQL数据库,用来计算钱。我有两张桌子:余额和货币

在money表中有两列:id(它是AUTO_INCREMENT和PRIMARY)和name。该表现在包含:

1 | Card
2 | Cash
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
余额表中有三列:id(自动增量和主)、余额、时间和货币id。该表现在包含:

1 | Card
2 | Cash
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 |

我投票关闭,因为这太宽泛了,我的意思是“太基本”听起来像是你想要一个分组方式,但我不理解你的用例,为什么你不想使用limit?最有可能的是分组方式。试着重新组织这个组织task@DavidNguyen:因为你想要“货币”表中每一项的最新现金价值,限制是不行的。他的问题有点误导(不是分组),但这是因为他不太懂SQL。他希望显示每种货币的最新余额/$。该查询不显示余额,因此我将第一行编辑为:选择b.balance,a.name,COUNT(*),但问题在于,它无法在余额时间之前获得最新余额。所以平衡是错误的。这是对最初提出的问题的正确答案。但问题从那以后发生了很大的变化,这是不幸的。这些A.x到底是什么?MySQL表示未知列。如果A的意思与m相同,那么就没有m.time,只有b.time。@Saharsh Shah)作为A在b.money_id=A.money_id和b.time=A.time上;这些是钱和时间