相关疑难解决方法(0)

获取具有列的最大值的行

表:

UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)

我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)

更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.

sql oracle greatest-n-per-group

556
推荐指数
10
解决办法
56万
查看次数

获取每组分组结果的前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万
查看次数

如何从具有重复SQL的SQL表中的每个组中选择前3个值

假设我们有一个包含两列的表,一列包含一些人的名字,另一列包含与每个人相关的一些值.一个人可以拥有多个价值.每个值都有一个数字类型.问题是我们要从表中为每个人选择前3个值.如果一个人的值少于3,我们会选择该人的所有值.

如果本文中提供的查询在表中没有重复项,则可以解决此问题.使用SQL从表中的每个组中选择前3个值.但如果有重复,那么解决方案是什么?

例如,如果对于一个名字John,他有5个与他相关的值.它们是20,7,7,7,4.我需要按以下顺序返回名称/值对每个名称的降序值:

-----------+-------+
| name     | value |
-----------+-------+
| John     |    20 |
| John     |     7 |
| John     |     7 |
-----------+-------+
Run Code Online (Sandbox Code Playgroud)

John应该只返回3行,即使John有3个7.

sql

14
推荐指数
2
解决办法
6万
查看次数

通过"SELECT"命令选择每组的前两个记录的最佳方法是什么?

例如,我有下表:

id group data
1 1 aaa
2 1 aaa
3 2 aaa
4 2 aaa
5 2 aaa
6 3 aaa
7 3 aaa
8 3 aaa
Run Code Online (Sandbox Code Playgroud)

通过"SELECT"命令选择每组的前两个记录的最佳方法是什么?如果没有好办法,你建议做什么例程?(在PHP中)

(模型结果)

1 1 aaa
2 1 aaa
3 2 aaa
4 2 aaa
6 3 aaa
7 3 aaa
Run Code Online (Sandbox Code Playgroud)

我知道在子查询中通过a.id> = b.id进行交叉连接可以正常工作,但我正在寻找一种可扩展的解决方案,可以应用于具有数百万条记录的表.谢谢

php mysql sql group-by greatest-n-per-group

5
推荐指数
1
解决办法
1662
查看次数

ClickHouse 中按组排列的前 N ​​行

在 ClickHouse 中按组查询前 N 行的正确方法是什么?
让我们以具有 id2、id4、v3 列且 N=2 的 tbl 为例。我尝试了以下方法

SELECT                                                                          
    id2,                                                                        
    id4,                 
    v3 AS v3        
FROM tbl
GROUP BY                 
    id2,                 
    id4                  
ORDER BY v3 DESC                                                                
LIMIT 2 BY                       
    id2,                 
    id4      
Run Code Online (Sandbox Code Playgroud)

但出现错误

Received exception from server (version 19.3.4):
Code: 215. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception
: Column v3 is not under aggregate function and not in GROUP BY..
Run Code Online (Sandbox Code Playgroud)

我可以放入v3GROUP BY ,它似乎确实有效,但按指标分组效率不高。

any聚合函数,但我们实际上想要all值(通过 LIMIT BY 子句限制为 2)而不是any值,所以这听起来不是正确的解决方案。

Received exception from …
Run Code Online (Sandbox Code Playgroud)

greatest-n-per-group clickhouse

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

我如何获得每个类别的前n个记录

我在这里根据类别获取记录.

我的表foo有字段[id,name,class].我的记录可以像:

1, ram, 10
2, hari, 9
3, sita, 10
4, gita, 9
5, rita, 5
6, tina, 7
8, nita, 8
9, bita, 5
10,seta, 7
Run Code Online (Sandbox Code Playgroud)

...和更多...

现在我想得到来自不同类的每条记录的结果..即类似的东西

1, ram, 10
2, hari, 9
5, rita, 5
6, tina, 7
8, nita, 8
Run Code Online (Sandbox Code Playgroud)

即按班级排名前1位

mysql sql t-sql sql-server plsql

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

每组选择前20行

我有一个有3列的表Item,CityVisitNumber.

在这张表中有很多记录,我需要选择每个城市的前20项(根据他们的访问数量).

例如,如果华盛顿有100个项目,纽约有250个项目,洛杉矶有500个项目,我需要为每个城市选择60个最常访问的行(华盛顿20个,纽约20个,洛杉矶20个)

怎么可能TSQL

t-sql sql-server select group-by greatest-n-per-group

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

(Ms Access) Row_Number() 超过分区

如何在 MS ACCESS 上使用过度分区转换 row_number() 函数?我想要实现的是:

从这张表中:

ID  | EntryDate  
10  | 2016-10-10
10  | 2016-12-10
10  | 2016-12-31
10  | 2017-01-31
10  | 2017-03-31
11  | 2015-01-31
11  | 2017-01-31
Run Code Online (Sandbox Code Playgroud)

对于此输出,仅显示每个 ID 的前 3 个最新:

ID  | EntryDate  
10  | 2016-12-31
10  | 2017-01-31
10  | 2017-03-31
11  | 2015-01-31
11  | 2017-01-31
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 上,我可以使用以下代码实现这一点:

select T.[ID],
   T.[AptEndDate],
from (
 select T.[ID],
        T.[AptEndDate],
        row_number() over(partition by T.[ID] order by T.[AptEndDate] desc) as rn
 from Table1 as …
Run Code Online (Sandbox Code Playgroud)

sql ms-access vba

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