我有这个文件表(这里是简化版):
+------+-------+--------------------------------------+
| id | rev | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 1 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
+------+-------+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)
如何为每个id选择一行并且只选择最大转速?
使用上面的数据,结果应该包含两行:[1, 3, ...]和[2, 1, ..].我正在使用MySQL.
目前,我在while循环中使用检查来检测并覆盖结果集中的旧转速.但这是实现结果的唯一方法吗?是不是有SQL解决方案?
更新
作为答案提示,有是一个SQL的解决方案,并且这里sqlfiddle演示.
更新2
我注意到在添加上述sqlfiddle之后,问题被投票的速率超过了答案的upvote率.那不是故意的!小提琴是基于答案,特别是接受的答案.
mysql sql aggregate-functions greatest-n-per-group groupwise-maximum
我不小心启用了ONLY_FULL_GROUP_BY这样的模式:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Run Code Online (Sandbox Code Playgroud)
我该如何禁用它?
以下是最简单的可能示例,但任何解决方案都应该能够扩展到需要的n个顶级结果:
根据下面的表格,使用人员,组和年龄列,您将如何获得每组中最老的2个人?(组内的关系不应该产生更多结果,但按字母顺序给出前2个)
+--------+-------+-----+ | Person | Group | Age | +--------+-------+-----+ | Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paul | 2 | 36 | | Laura | 2 | 39 | +--------+-------+-----+
期望的结果集:
+--------+-------+-----+ | Shawn | 1 | 42 | | Jill | 1 | 34 | | Laura | 2 | 39 | | …
我如何在mysql查询的where子句中使用max()函数,我正在尝试:
select firstName,Lastname,MAX(id) as max where id=max;
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
Unknown column 'max' in 'where clause'
Run Code Online (Sandbox Code Playgroud)
任何帮助?提前致谢.
波纹管是一个示例表。
ID FROM TO DATE
1 Number1 Number2 somedate
2 Number2 Number1 somedate
3 Number2 Number1 somedate
4 Number3 Number1 somedate
5 Number3 Number2 somedate
Run Code Online (Sandbox Code Playgroud)
预期结果是为每对唯一的 TO 和 FROM 列获得 1 行
如果按 ID ASC 排序,则示例结果
(1,Number1,Number2)
(4,Number3,Number1)
(5,Number3,Number2)
Run Code Online (Sandbox Code Playgroud)
好的,我找到了如何使用以下查询执行此操作
SELECT * FROM table GROUP BY LEAST(to,from), GREATEST(to,from)
Run Code Online (Sandbox Code Playgroud)
但是,我无法获得每个唯一对的最新记录。
我试过,order by ID desc但它返回唯一对的第一个找到的行。
以下查询:
SELECT *
FROM productlist.pricelist_merchant
WHERE product_id <> '0'
ORDER BY
product_id ASC,
qty = 0,
price ASC;
Run Code Online (Sandbox Code Playgroud)
返回:
Merchant|product_id|price |qty|
Merch_A |3217 |44.30 |16 |
Merch_Z |3217 |45.14 |2 |
Merch_U |3217 |45.62 |16 |
Merch_I |3217 |46.06 |16 |
Merch_Q |3217 |48.98 |55 |
Merch_B |3217 |39.58 |0 |
Merch_T |3217 |45.97 |0 |
Merch_M |3217 |46.40 |0 |
Merch_L |3220 |105.84|1 |
Merch_Z |3220 |147.00|3 |
Merch_U |3220 |149.36|2 |
Merch_A |3220 |149.99|2 |
Merch_Q |3220 |153.53|90 …Run Code Online (Sandbox Code Playgroud) 有一个像这样的表 T:
ID DateTime asha
AF35 15-01-17 af
AF35 14-01-17 la
AF35 13-01-17 fi
DF57 15-01-17 sk
DF57 14-01-17 sj
DG36 15-01-17 be
DG36 14-01-17 dh
Run Code Online (Sandbox Code Playgroud)
最简单的mysql查询是什么,每个返回的唯一值只有第一行ID ,并按最新的排序DateTime?
我预期的结果会是这样的:
ID DateTime asha
AF35 15-01-17 af
DF57 15-01-17 sk
DG36 15-01-17 be
Run Code Online (Sandbox Code Playgroud)
我尝试过SELECT * FROM T GROUP BY ID ORDER BY DateTime,但是,mysql 由于没有将其他列添加到子句中而返回错误。如果我添加它们,我仍然会得到重复的 ID 结果。
我有一张桌子:发票
inv_id cus_id due_amt paid total_due
1 71 300 0 300
2 71 200 0 500
3 71 NULL 125 375
4 72 50 0 50
5 72 150 0 200
Run Code Online (Sandbox Code Playgroud)
我想要结果
cus_id total_due
71 375
72 200
Run Code Online (Sandbox Code Playgroud)
这是我想total_due的unique customer或以其他方式可以说我需要latest invoice的细节unique customer。
我试过的:
SELECT cus_id, total_due FROM invoice GROUP BY cus_id ORDER BY inv_id DESC
但这并没有给出所需的结果。
请有人可以帮助我..