标签: greatest-n-per-group

如何在R中的每个组中选择'x'最近的值?

我正在尝试在 R 中的数据框中选择/过滤每个组中的最新值。例如,我想从以下数据中的每个 Name 组中选择 3 个最近的值(即最接近今天的日期)框架:

Player  Date    Result
 Sam    03/15/2015  1
 Sam    03/22/2015  0
 Sam    04/04/2015  2
 Sam    04/12/2015  1
 Sam    04/18/2015  1
 Sam    04/26/2015  0
 Sam    08/08/2015  3
Steve   02/17/2015  0
Steve   02/21/2015  0
Steve   03/04/2015  4
Steve   03/11/2015  2
Steve   03/15/2015  1
Steve   03/22/2015  0
Steve   04/12/2015  0
Steve   04/18/2015  2
Steve   04/26/2015  1
Steve   04/29/2015  2
Steve   08/16/2015  4
Jasper  03/15/2015  3
Jasper  03/22/2015  3.5
Jasper  04/04/2015  4
Jasper  04/12/2015  4
Jasper  04/18/2015  5
Jasper …
Run Code Online (Sandbox Code Playgroud)

r greatest-n-per-group

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

Postgres 按列分组,并在组内按最大聚合选择其他列

这可能是一个标准问题,我已经排除了其他一些答案,但到目前为止无法解决我当前的问题。

A              B             C
+----+-------+ +----+------+ +----+------+-------+
| id | start | | id | a_id | | id | b_id | name  |
+----+-------+ +----+------+ +----+------+-------+
|  1 |     1 | |  1 |    1 | |  1 |    1 | aname |
|  2 |     2 | |  2 |    1 | |  2 |    2 | aname |
+----+-------+ |  3 |    2 | |  3 |    3 | aname |
               +----+------+ |  4 | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql group-by greatest-n-per-group

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

获取每组最新的n条记录

假设我有下表:

id  coulmn_id  value    date
1      10      'a'     2016-04-01
1      11      'b'     2015-10-02
1      12      'a'     2016-07-03
1      13      'a'     2015-11-11
2      11      'c'     2016-01-10
2      23      'd'     2016-01-11
3      11      'c'     2016-01-09
3      111     'd'     2016-01-11
3      222      'c'     2016-01-10
3      333      'd'     2016-01-11
Run Code Online (Sandbox Code Playgroud)

对于 n = 3,我想为每个 id 获取最新的 n 条记录<=3。所以我将有以下输出:

id  column_id  value    date
1      10        'a'     2016-04-01
1      12        'a'     2016-07-03
1      13        'a'     2015-11-11
2      11        'c'     2016-01-10
2      23        'd'     2016-01-11
3      111       'd' …
Run Code Online (Sandbox Code Playgroud)

mysql sql greatest-n-per-group

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

在具有复合主键的表中使用 MAX(DATE) 进行 GROUP BY

我试图在表格中列出每个 SKU 的条形码,但在某些情况下条形码是不同的,因此我想从一个 sku 获取一个条形码,并且返回的条形码应该是具有最新 UpdateDate 的条形码。

例子:

StoreID     SKU    BarCode           UpdateDate
-------------------------------------------------------------
1           95810  28471000000       10/06/2016 04:20:00 a.m.
1           95810  30040050033       01/03/2012 01:00:00 a.m.
2           44320  65453102001       15/05/2010 01:00:00 a.m.
2           44320  12343102001       01/01/2015 01:00:00 a.m.
Run Code Online (Sandbox Code Playgroud)

期望的结果应该是:

StoreID     SKU    BarCode           UpdateDate
-------------------------------------------------------------
1           95810  28471000000       10/06/2016 04:20:00 a.m.
2           44320  12343102001       01/01/2015 01:00:00 a.m.
Run Code Online (Sandbox Code Playgroud)

我尝试过使用

SELECT  
    t.SKU, r.MaxTime
FROM
    (SELECT 
         P.SKU, MAX(P.Fec_Movto) as MaxTime
     FROM 
         Productos as P
     GROUP BY 
         P.SKU) r
INNER JOIN 
    Productos t ON t.SKU = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server greatest-n-per-group

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

Postgresql - 获取列中具有最大值的行

我想形成一个 sql 查询,它返回一些行的数据,这些数据在某个组中具有最大值。考虑以下演示示例:

共有三个表:国家、出版商和书籍。每个出版商属于一个国家,每本书都有一个出版商。定义可能看起来像

Country(country_id, country_name)
Publisher(pub_id, pub_name, fk_pub_country)
Book(book_id, book_name, release_date, fk_book_publisher)
Run Code Online (Sandbox Code Playgroud)

我想选择按国家/地区分组的 (country_id, book_name),以便每一行都包含该国家/地区最近发行的书籍的名称。如果同一天发布多本书,我应该拿到id最高的那一本。

如果我只使用 group by -clause 和 max,则不能包含书名。如果我选择视图 (country_id, max_date) 并将其与出版商和书籍连接,我可能会收到每个国家/地区的多行。我怎样才能达到预期的结果?

sql postgresql greatest-n-per-group

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

如何在 SQLAlchemy/Postgres 中限制每个“group_by”的 N 个结果?

这是我的 SQLAlchemy 查询代码

medium_contact_id_subq = (g.session.query(distinct(func.unnest(FUContact.medium_contact_id_lis))).filter(FUContact._id.in_(contact_id_lis))).subquery()
q = (g.session.query(FUMessage).
         filter(FUMessage.fu_medium_contact_id.in_(medium_contact_id_subq))
         .order_by(desc(FUMessage.timestamp_utc))
         )
Run Code Online (Sandbox Code Playgroud)

我想限制FUMessage分组依据medium_contact_idN 个结果。


作为解决方法,这是我当前丑陋且未经优化的代码:

    medium_contact_id_lis = (g.session.query(distinct(func.unnest(FUContact.medium_contact_id_lis))).filter(FUContact._id.in_(contact_id_lis))).all()
    q = None
    for medium_contact_id_tup in medium_contact_id_lis:
        medium_contact_id = medium_contact_id_tup[0]
        if q is None:
            q = (g.session.query(FUMessage)
                 .filter(FUMessage.fu_medium_contact_id == medium_contact_id)
                 .limit(MESSAGE_LIMIT)
                 )
        else:
            subq = (g.session.query(FUMessage)
                 .filter(FUMessage.fu_medium_contact_id == medium_contact_id)
                 .limit(MESSAGE_LIMIT)
                 )
            q = q.union(subq)
    q = q.order_by(desc(FUMessage.timestamp_utc))
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy greatest-n-per-group

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

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

Oracle SQL,如何选择组中的第一行?

这是我的 SQL 小提琴:http://sqlfiddle.com/#!4/75ab7 /2

基本上,我创建了一个表并向其中插入一些数据。

CREATE TABLE subject (
  id INT NOT NULL,
  seq_num INT NOT NULL,
  name VARCHAR(30) NOT NULL
);

INSERT INTO subject 
  (id, seq_num, name) 
VALUES 
  (1, 1, 'sub_1_1');

INSERT INTO subject 
  (id, seq_num, name) 
VALUES 
  (2, 1, 'sub_1_2');

INSERT INTO subject 
  (id, seq_num, name) 
VALUES 
  (3, 2,'sub_2_1');

INSERT INTO subject 
  (id, seq_num, name) 
VALUES 
  (4, 2, 'sub_2_2');

INSERT INTO subject 
  (id, seq_num, name) 
VALUES 
  (5, 2, 'sub_2_3');

INSERT INTO subject 
  (id, seq_num, name) 
VALUES 
  (6, …
Run Code Online (Sandbox Code Playgroud)

sql oracle11g greatest-n-per-group

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

如何在oracle select sql中获取不在GROUP BY子句中的其他列?

我有一个包含这些数据的表 MOVIE。

MOVIE_ID  MOVIE_TITLE              CATEGORY        SALES_AMT
--------- ------------------------ --------------- ----------
M_0000004 The Boss Baby            Animation       2000
M_0000006 Star Wars: The Last Jedi Science Fiction 3000
M_0000007 Get Out                  Horror          4000
M_0000008 Million Dollar Arm       Action          2000
M_0000009 The Conjuring            Horror          1000
M_0000012 The Dark Knight          Action          3000
Run Code Online (Sandbox Code Playgroud)

我需要基于以下SALES_AMT方面的热门电影数据CATEGORY

所需的结果是这样的:

MOVIE_ID  MOVIE_TITLE              CATEGORY        SALES_AMT
--------- ------------------------ --------------- ----------
M_0000004 The Boss Baby            Animation       2000
M_0000006 Star Wars: The Last Jedi Science Fiction 3000
M_0000007 Get Out                  Horror          4000 …
Run Code Online (Sandbox Code Playgroud)

sql oracle group-by greatest-n-per-group

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

如何获取mysql中每个用户的最新消息?

我有数据库来存储客户和消息

在此处输入图片说明

我正在尝试获取所有客户及其最新消息的列表,例如 Messenger 中的第一个屏幕。

SELECT *
FROM message AS m
LEFT JOIN customer AS c ON c.id=m.sender_id
ORDER BY m.sent_at DESC
Run Code Online (Sandbox Code Playgroud)

但这会返回所有用户的所有消息。我也试过这样做

SELECT * 
FROM message AS m
LEFT JOIN customer AS c ON c.id=m.sender_id
GROUP BY c.id
Run Code Online (Sandbox Code Playgroud)

但这不会在所有数据库上运行,并且无法对结果集进行排序以仅获取最新消息。

mysql sql datetime greatest-n-per-group window-functions

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