在 Sqlite 3 中,我试图弄清楚如何根据最小值选择行。我认为我对相关术语的了解不足,无法有效地搜索谷歌。
该表看起来像:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Run Code Online (Sandbox Code Playgroud)
我想获取num2is1, 2和的行4。我想根据文本列的每个唯一值的 num 的最小值进行选择。
所以,对于text = 'a',最小值num是0,所以我想要第 1 行和第 2 行。对于text = 'b',最小值num是1,所以我想要行4。
使用 group by 的各种组合,我可以得到行1和2或行1和4。我觉得我缺少一个可以做我想做的事情的 SQL 组件,但我一直无法弄清楚它可能是什么。
执行此类查询的正确方法是什么?
我找到了一种方法来做到这一点。我的声誉不足以回答我自己的问题,所以我在这里进行更新。我不确定它是否总是正确的或效率如何。欢迎提出任何意见。
我使用了一个复合选择语句,其中一个查询为文本的每个唯一值找到 num 的最小值:
sqlite> select …Run Code Online (Sandbox Code Playgroud) 我确定这是一个简单的问题,我想它被问了很多次,但我无法从其他答案中弄清楚,抱歉。
我使用最新版本的 PostgreSQL 和 MySQL。我有2张桌子:
CREATE TABLE authors (
id INT,
name VARCHAR
)
CREATE TABLE posts (
id INT,
author_id INT,
text VARCHAR,
date DATE
)
Run Code Online (Sandbox Code Playgroud)
我需要为每个作者选择一个最新的帖子。谢谢!
更新
谢谢,这两个链接都提供了我的问题的答案,但有一些例外。以下所有查询都给出了相同的结果(顺便说一句,哪个最有效?)然后返回的结果集包含所有此类帖子。我应该如何修改这些查询返回正好每位作者一个帖子?
SELECT p1.*
FROM posts p1
LEFT JOIN posts p2 ON p1.author_id = p2.author_id AND p1.date < p2.date
WHERE p2.author_id IS NULL
ORDER BY p1.author_id;
SELECT p1.*
FROM posts p1
INNER JOIN (
SELECT author_id, MAX(date) AS max_date
FROM posts
GROUP BY author_id) p2
ON p1.author_id = p2.author_id AND …Run Code Online (Sandbox Code Playgroud)