我正在尝试在 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) 这可能是一个标准问题,我已经排除了其他一些每组最佳答案,但到目前为止无法解决我当前的问题。
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) 假设我有下表:
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) 我试图在表格中列出每个 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 查询,它返回一些行的数据,这些数据在某个组中具有最大值。考虑以下演示示例:
共有三个表:国家、出版商和书籍。每个出版商属于一个国家,每本书都有一个出版商。定义可能看起来像
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) 并将其与出版商和书籍连接,我可能会收到每个国家/地区的多行。我怎样才能达到预期的结果?
这是我的 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_id
N 个结果。
作为解决方法,这是我当前丑陋且未经优化的代码:
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) 以下查询:
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) 这是我的 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) 我有一个包含这些数据的表 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) 我有数据库来存储客户和消息
我正在尝试获取所有客户及其最新消息的列表,例如 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)
但这不会在所有数据库上运行,并且无法对结果集进行排序以仅获取最新消息。
sql ×7
group-by ×3
mysql ×3
postgresql ×3
datetime ×1
limit ×1
oracle ×1
oracle11g ×1
python ×1
r ×1
sql-server ×1
sqlalchemy ×1