标签: groupwise-maximum

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万
查看次数

LEFT JOIN仅第一行

我读了许多关于只获得左连接的第一行的线程,但是,由于某种原因,这对我不起作用.

这是我的结构(当然简化)

饲料

id |  title | content
----------------------
1  | Feed 1 | ...
Run Code Online (Sandbox Code Playgroud)

艺术家

artist_id | artist_name
-----------------------
1         | Artist 1
2         | Artist 2
Run Code Online (Sandbox Code Playgroud)

feeds_artists

rel_id | artist_id | feed_id
----------------------------
1      |     1     |    1 
2      |     2     |    1 
...
Run Code Online (Sandbox Code Playgroud)

现在我想获得文章并加入第一位艺术家,我想到了这样的事情:

SELECT *
    FROM feeds 
    LEFT JOIN feeds_artists ON wp_feeds.id = (
        SELECT feeds_artists.feed_id FROM feeds_artists
        WHERE feeds_artists.feed_id = feeds.id 
    LIMIT 1
    )
WHERE feeds.id = '13815'
Run Code Online (Sandbox Code Playgroud)

只是为了获得feed_artists的第一行,但这已经不起作用了.

我无法使用TOP因为我的数据库而且我无法对结果进行分组,feeds_artists.artist_id因为我需要按日期对它们进行排序(我通过这种方式对结果进行分组,但结果不是最新的)

用OUTER …

mysql join left-join groupwise-maximum

125
推荐指数
4
解决办法
17万
查看次数

选择r中组中具有最大变量值的行

a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)

r<-sapply(split(a.3,a.2),function(x) which.max(x$b.2))

a.3[r,]
Run Code Online (Sandbox Code Playgroud)

返回列表索引,而不是整个data.frame的索引

我试图返回b.2每个子组的最大值a.2.我怎样才能有效地做到这一点?

r groupwise-maximum

9
推荐指数
3
解决办法
8312
查看次数

优化分组最大查询

select * 
from records 
where id in ( select max(id) from records group by option_id )
Run Code Online (Sandbox Code Playgroud)

此查询即使在数百万行上也能正常工作.但是从解释声明的结果可以看出:

                                               QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------
Nested Loop  (cost=30218.84..31781.62 rows=620158 width=44) (actual time=1439.251..1443.458 rows=1057 loops=1)
->  HashAggregate  (cost=30218.41..30220.41 rows=200 width=4) (actual time=1439.203..1439.503 rows=1057 loops=1)
     ->  HashAggregate  (cost=30196.72..30206.36 rows=964 width=8) (actual time=1438.523..1438.807 rows=1057 loops=1)
           ->  Seq Scan on records records_1  (cost=0.00..23995.15 rows=1240315 width=8) (actual time=0.103..527.914 rows=1240315 loops=1)
->  Index Scan using records_pkey on records  (cost=0.43..7.80 rows=1 width=44) (actual time=0.002..0.003 rows=1 loops=1057)
     Index Cond: (id = (max(records_1.id)))
Total …
Run Code Online (Sandbox Code Playgroud)

sql postgresql query-optimization greatest-n-per-group groupwise-maximum

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

SQL:获取一列中的最小值和最大值

我有一张employee桌子,上面有姓名和工资。

我想打印这两列,其中只有 2 条记录,即我工资最高和最低的员工的姓名。

它应该看起来像这样:

Name      Salary  
------------------
James       800  
Samanth    3000
Run Code Online (Sandbox Code Playgroud)

以下代码不是我想要的,我想要 2 列中的最小值和最大值,并有 2 个名称代表每个值

SELECT 
    name, MIN(salary), MAX(salary)
FROM
    employee
Run Code Online (Sandbox Code Playgroud)

sql groupwise-maximum

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

从mysql表中获得第二高的值

我有一个包含四个字段的表,如下所示,

(UID是用户ID)

ID UID MUSIC DATE 
1   0   a   2013-10-20
2   0   a   2013-10-21
3   0   a   2013-10-22
4   0   a   2013-10-24
5   0   b   2013-10-11
8   0   b   2013-10-15
10  0   c   2013-10-26
9   0   c   2013-10-25
7   0   c   2013-10-20
6   0   c   2013-10-18
11  0   d   2013-10-10
Run Code Online (Sandbox Code Playgroud)

如何使用MySQL Query从上表中检索所有第二高的日期?

预期结果:

ID UID MUSIC DATE 
3   0   a   2013-10-22
5   0   b   2013-10-11
9   0   c   2013-10-25
Run Code Online (Sandbox Code Playgroud)

要么

ID UID MUSIC DATE 
3   0   a   2013-10-22
5   0 …
Run Code Online (Sandbox Code Playgroud)

mysql group-by groupwise-maximum

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

按组查找运行最大值

我需要使用R按组查找变量的运行最大值.变量按组内的时间排序使用df[order(df$group, df$time),].

我的变量有一些NA,但我可以通过用零替换它来处理它.

这是数据框df的样子:

(df <- structure(list(var = c(5L, 2L, 3L, 4L, 0L, 3L, 6L, 4L, 8L, 4L),
               group = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
                                 .Label = c("a", "b"), class = "factor"),
               time = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L)),
          .Names = c("var", "group","time"),
          class = "data.frame", row.names = c(NA, -10L)))

#    var group time
# 1    5     a    1
# 2    2     a    2
# 3    3     a …
Run Code Online (Sandbox Code Playgroud)

r max groupwise-maximum

3
推荐指数
2
解决办法
982
查看次数

获取每个 Group By SQL 的最新记录

我有下表:

-----------------------------------------------------------
ID     oDate         oName     oItem    oQty    oRemarks
-----------------------------------------------------------
1      2016-01-01    A         001      2       
2      2016-01-01    A         002      1       test
3      2016-01-01    B         001      3  
4      2016-01-02    B         001      2
5      2016-01-02    C         001      2
6      2016-01-03    B         002      1
7      2016-01-03    B         001      4
       ff.
Run Code Online (Sandbox Code Playgroud)

我想获得每个名字的最新记录。所以结果应该是这样的:

-----------------------------------------------------------
oDate         oName     oItem    oQty    oRemarks
-----------------------------------------------------------
2016-01-01    A         001      2       
2016-01-01    A         002      1       test
2016-01-02    C         001      2
2016-01-03    B         002      1
2016-01-03    B         001      4
ff.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何得到这个结果?

sql sql-server select sql-server-2008-r2 groupwise-maximum

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

SQL:如果另一列不匹配,如何排除最大值

我正在使用Oracle 10g.我在
SQL上的 研究- 如何选择具有最大值列的行

http://jan.kneschke.de/projects/mysql/groupwise-max/

解决如何处理max(行)然后找到其他max(行)但是,我还没有.

标准: ID最大值(enroll_date)的代码必须为"WHEAT".
我不希望代码为"WHEAT"的最长注册日期.只有当代码为最大注册日期的"WHEAT"时,我才想要该行.

问题:如何编写查询以满足条件?

这不起作用,因为它返回ID = 30,Code = WHEAT,其中Date 12/25/2001不是该ID的最大值(日期).

    select ID, code, max(enroll_date)
    from enrollment
    where  CODE = 'WHEAT'
    group by ID, code
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它也返回ID = 30,Code = WHEAT,其中date = 12/25/2001.

    select ID, code, max(enroll_date)
    from enrollment
    group by ID, code
    having code='WHEAT'
Run Code Online (Sandbox Code Playgroud)

这是我的桌子

ENROLLMENT
===========================
ID  CODE     ENROLL_DATE
--------------------------
01  WHEAT   <NULL>
01  WHEAT   12/21/2007
01  WHEAT   7/30/2009
30  WHEAT   12/25/2001
30  CHAFF   6/14/2010
72  WHEAT   8/20/2002
72  WHEAT …
Run Code Online (Sandbox Code Playgroud)

sql oracle max oracle10g groupwise-maximum

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

mysql 选择组中的最新时间戳

我有一个表,我想为其选择由表中特定列的值定义的类别中的最新时间戳。

具体来说

SELECT * 
FROM   takelist 
WHERE  producer_name = 'sean' 
       AND bucket_id = '2CCEx15_1o' 
Run Code Online (Sandbox Code Playgroud)

结果是

+-------------+---------------+------------+---------------------+
| takelist_id | producer_name | bucket_id  | ts                  |
+-------------+---------------+------------+---------------------+
|           1 | sean          | 2CCEx15_1o | 2013-10-07 18:29:00 |
|           4 | sean          | 2CCEx15_1o | 2013-10-07 18:33:09 |
|           5 | sean          | 2CCEx15_1o | 2013-10-07 18:33:38 |
|          27 | sean          | 2CCEx15_1o | 2013-10-07 18:37:38 |
|         212 | sean          | 2CCEx15_1o | 2013-10-14 18:36:05 |
|         236 | sean …
Run Code Online (Sandbox Code Playgroud)

mysql sql select group-by groupwise-maximum

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

如何从mysql表中检索重复记录的最新数据

我正在尝试从 SQL 表中检索每条记录的最新数据。每条记录都会有重复的数据,并有一些数据变化。我需要检索最新的带时间戳的数据。有人可以建议哪个是性能方面的最佳解决方案吗?见过一些带有内部联接和子查询的解决方案。

下面给出的示例数据

Technology Students Amount Area      Date
python     500      1000   Bangalore 2021-08-06 12:03:26
Ruby       100      1000   Bangalore 2021-08-06 05:18:50
Java       300      1000   Bangalore 2021-08-06 18:23:40
python     900      1000   Bangalore 2021-08-06 16:23:30
Java       100      1000   Bangalore 2021-08-06 12:23:50
Ruby       500      1000   Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud)

我的 O/P 应该包含每种技术的最新数据

Technology Students Amount Area      Date
Java       300      1000   Bangalore 2021-08-06 18:23:40
python     900      1000   Bangalore 2021-08-06 16:23:30
Ruby       500      1000   Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud)

mysql query-optimization database-performance groupwise-maximum

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

MySQL 分组并仅从每个组中选择第一个

我想执行一个查询,仅选择给定组中的最新项目。


在此示例中,我正在跟踪货车:

  • 每次他们返回基地时,check-in都会记录信息 - 里程等......
  • 每次他们送货时,delivery都会记录客户等......

该表让我们了解给定的历史记录van。数据可以通过查询生成或随时存储 - 这不是问题。

 id | checkin_id | delivery_id | van_id
----+------------+-------------+--------
 24 | 15         | NULL        | 3
 25 | NULL       | 28          | 3
 26 | 16         | NULL        | 4
 27 | NULL       | 29          | 3
 28 | NULL       | 30          | 4
 29 | 17         | NULL        | 5
Run Code Online (Sandbox Code Playgroud)

我可以通过使用 - 查询来查看货车的历史记录 ... WHERE van_id=3;

相反,我希望能够获得vans他们最近的“事件”的列表。结果是这样的:

 id | checkin_id …
Run Code Online (Sandbox Code Playgroud)

mysql greatest-n-per-group groupwise-maximum

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

如何根据两个字段的最大值选择记录?

鉴于以下简单表:

+-----+-------------+---------+----+
| id_ | match_op_id | version | p1 |
+-----+-------------+---------+----+
|   1 |           1 |       1 |  1 |
|   2 |           1 |       1 |  5 |
|   3 |           1 |       2 |  3 |
|   4 |           1 |       2 |  4 |
|   5 |           2 |       1 |  1 |
|   6 |           2 |       1 |  5 |
|   7 |           2 |       2 |  3 |
|   8 |           2 | …
Run Code Online (Sandbox Code Playgroud)

mysql groupwise-maximum

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