相关疑难解决方法(0)

SQL仅选择列上具有最大值的行

我有这个文件表(这里是简化版):

+------+-------+--------------------------------------+
| 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

1142
推荐指数
14
解决办法
107万
查看次数

禁用ONLY_FULL_GROUP_BY

我不小心启用了ONLY_FULL_GROUP_BY这样的模式:

SET sql_mode = 'ONLY_FULL_GROUP_BY';
Run Code Online (Sandbox Code Playgroud)

我该如何禁用它?

mysql mysql-workbench

538
推荐指数
25
解决办法
72万
查看次数

获取每组分组结果的前n条记录

以下是最简单的可能示例,但任何解决方案都应该能够扩展到需要的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 sql greatest-n-per-group mysql-variables

132
推荐指数
8
解决办法
14万
查看次数

MAX函数在where子句mysql中

我如何在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)

任何帮助?提前致谢.

mysql sql max greatest-n-per-group

31
推荐指数
5
解决办法
12万
查看次数

SQL如何按两列分组

波纹管是一个示例表。

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但它返回唯一对的第一个找到的行。

mysql sql

3
推荐指数
1
解决办法
2092
查看次数

MySQL只显示特定字段的第一行

以下查询:

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)

mysql group-by limit greatest-n-per-group

2
推荐指数
1
解决办法
981
查看次数

为每个不同的列值选择第一行

有一个像这样的表 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 结果。

mysql sql

0
推荐指数
1
解决办法
2694
查看次数

不同列的Mysql最新记录

我有一张桌子:发票

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_dueunique customer或以其他方式可以说我需要latest invoice的细节unique customer

我试过的:

SELECT cus_id, total_due FROM invoice GROUP BY cus_id ORDER BY inv_id DESC

但这并没有给出所需的结果。

请有人可以帮助我..

mysql group-by

0
推荐指数
1
解决办法
251
查看次数