Questions tagged «greatest-n-per-group»

将此问题用于涉及从数据集中的每个组返回一个或多个行的问题。尽管有名称,此标记适用于每个组查询的* minimum- *和* maximum- *。

6
每组检索n行
我经常需要从结果集中的每个组中选择一些行。 例如,我可能想列出每个客户的'n'个最高或最低最近订单值。 在更复杂的情况下,每个组要列出的行数可能有所不同(由分组/父记录的属性定义)。这部分绝对是可选的/为了获得额外的荣誉,并不旨在阻止人们回答。 解决SQL Server 2005及更高版本中此类问题的主要选项是什么?每种方法的主要优点和缺点是什么? AdventureWorks示例(为清楚起见,可选) TransactionHistory对于每个以M到R(含)开头的字母的产品,从表中列出五个最近的交易日期和ID 。 再次相同,但是n每个产品都有历史记录行,其中n是DaysToManufacture产品属性的五倍。 相同,在特殊情况下,每个产品只需要一个历史记录行(单个最近的条目,由TransactionDate,打破平局)TransactionID。

5
如何选择每个组的第一行?
我有一张这样的桌子: ID | Val | Kind ---------------------- 1 | 1337 | 2 2 | 1337 | 1 3 | 3 | 4 4 | 3 | 4 我想制作一个SELECT将仅返回第一行的Val命令,按排序Kind。 样本输出: ID | Val | Kind ---------------------- 2 | 1337 | 1 3 | 3 | 4 如何建立这个查询?

6
如何有效地获取“最近对应的行”?
我有一个必须非常常见的查询模式,但是我不知道如何为它编写有效的查询。我想查找与“最近日期不晚于”另一个表的行相对应的表的行。 例如,我有一张桌子,inventory它代表我当天持有的库存。 date | good | quantity ------------------------------ 2013-08-09 | egg | 5 2013-08-09 | pear | 7 2013-08-02 | egg | 1 2013-08-02 | pear | 2 还有一张表,上面写着“价格”,该表保存了某天的商品价格 date | good | price -------------------------- 2013-08-07 | egg | 120 2013-08-06 | pear | 200 2013-08-01 | egg | 110 …

3
在PostgreSQL中,是否存在类型安全的first()聚合函数?
完整问题重写 我在寻找First()聚合函数。 在这里,我发现了几乎可行的方法: CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement ) RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$ SELECT $1; $$; -- And then wrap an aggregate around it CREATE AGGREGATE public.first ( sfunc = public.first_agg, basetype = anyelement, stype = anyelement ); 问题在于,当varchar(n)列通过first()函数时,它将转换为简单的varchar(无大小)。尝试以函数RETURNS SETOF anyelement的形式返回查询时,出现以下错误: 错误:查询的结构与函数结果类型不匹配Estado de …

3
选择最晚日期或最晚日期
这是两个表。 学校员工 SCHOOL_CODE + STAFF_TYPE_NAME + LAST_UPDATE_DATE_TIME + PERSON_ID ================================================================= ABE Principal 24-JAN-13 111222 ABE Principal 09-FEB-12 222111 人事 PERSON_ID + NAME ================= 111222 ABC 222111 XYZ 这是我的oracle查询。 SELECT MAX(LAST_UPDATE_DATE_TIME) AS LAST_UPDATE, SCHOOL_CODE, PERSON_ID FROM SCHOOL_STAFF WHERE STAFF_TYPE_NAME='Principal' GROUP BY SCHOOL_CODE, PERSON_ID ORDER BY SCHOOL_CODE; 这给出了这个结果 LAST_UPDATE SCHOOL_CODE PERSON_ID ===========+===========+========= …

4
如何从联接中选择第一行,该联接在主键上返回多个行
这与以下问题有关: 连接多个表导致重复的行 我有两个要加入的表。他们共享密钥。人员表的每个主键只有一个名称,但是电子邮件表的每个personId都有多个电子邮件。我只想显示每人的第一封电子邮件。目前我每人多行,因为他们有多封电子邮件。我正在运行SQL Server 2005。 编辑:这是T-SQL。第一封电子邮件实际上是每人的第一封电子邮件行。 编辑2:我看到的第一封电子邮件将是SQL在查询过程中在连接中显示的第一封电子邮件行。没关系显示哪个电子邮件。只显示不超过一封电子邮件。我希望这一点更加清楚。 Table1: Person Table2: Email Select Person.PersonName, Email.Email From person left join on Person.ID=Email.PersonId;


2
高效的查询,以从大表中获取每个组的最大价值
给定表: Column | Type id | integer latitude | numeric(9,6) longitude | numeric(9,6) speed | integer equipment_id | integer created_at | timestamp without time zone Indexes: "geoposition_records_pkey" PRIMARY KEY, btree (id) 该表有2000万条记录,相对而言,这不是一个很大的记录。但这会使顺序扫描变慢。 如何获得max(created_at)每个记录的最后一条记录()equipment_id? 我已经尝试了以下两个查询,并阅读了有关该主题的许多答案的几种变体: select max(created_at),equipment_id from geoposition_records group by equipment_id; select distinct on (equipment_id) equipment_id,created_at from geoposition_records order by …

2
如何在PostgreSQL中使DISTINCT ON更快?
我station_logs在PostgreSQL 9.6数据库中有一个表: Column | Type | ---------------+-----------------------------+ id | bigint | bigserial station_id | integer | not null submitted_at | timestamp without time zone | level_sensor | double precision | Indexes: "station_logs_pkey" PRIMARY KEY, btree (id) "uniq_sid_sat" UNIQUE CONSTRAINT, btree (station_id, submitted_at) 我试图为每个获取level_sensor基于的最后一个值。大约有400个唯一值,每天每个大约2万行。submitted_atstation_idstation_idstation_id 创建索引之前: EXPLAIN ANALYZE SELECT DISTINCT ON(station_id) station_id, …

1
每列值选择限制1?
可以说我有下表 ----------------------------- | user_id | comment | ----------------------------- | 2 | thats cool | | 2 | awesome | | 3 | i hate this | | 3 | okay | | 6 | this is weird | | 6 | hello? | | 6 | what is it | …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.