问题标签 [greatest-n-per-group]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
58401 浏览

sql - 如何对每个账户的最后一笔交易进行 SQL 查询?

假设我有一个表“事务”,其中包含“acct_id”、“trans_date”和“trans_type”列,我想过滤这个表,以便我只有每个帐户的最后一笔交易。显然我可以做类似的事情

但后来我失去了我的 trans_type。然后,我可以使用我的日期列表和帐户 ID 进行第二次 SQL 调用,并取回我的 trans_type,但这感觉非常笨拙,因为这意味着要么将数据来回发送到 sql 服务器,要么意味着创建一个临时表。

有没有办法通过单个查询来做到这一点,希望是一种适用于 mysql、postgres、sql-server 和 oracle 的通用方法。

0 投票
2 回答
209 浏览

sql-server - 实施最新评论 - SQL Server

所以假设我有一堆博客条目,我想找出每个条目中的最新评论,我将如何在 SQL Server 中找到它。

我在临时表中有这些博客条目的整数 ID 列表。在这种情况下,像 select top 1 这样的东西不起作用。

我想到的方法是循环,我们都知道有多少人喜欢在 SQL Server 中避免循环。

0 投票
5 回答
19300 浏览

sql - 一对多查询为每个父母选择所有父母和单个顶级孩子

有两个 SQL 表:

我想用单个查询从父母表中选择每一行,并为孩子表中的每一行选择关系“父”-“id”值和最大“特征”列值。在此示例中,结果应为:

其中 p = 父表和 c = 子表

我尝试 LEFT OUTER JOIN 和 GROUP BY 但 MSSQL Express 告诉我使用 GROUP BY 的查询需要在每个非分组字段上使用聚合函数。而且我不想将它们全部分组,而是选择顶行(使用自定义排序)。

我完全没有想法......

0 投票
3 回答
10035 浏览

sql - SQL:如何根据最大日期时间为多个id选择一条记录?

我有以下 SQL 表,

我想编写一个查询,它将从上表中返回以下结果集:

上面的 reuslt 包含最新的(基于该 id 的最新日期时间)单个条目。这意味着我有多个带有日期时间的记录 ID。

我想获取所有 id 的最新单个条目。

0 投票
6 回答
15308 浏览

sql - PostgreSQL 选择每个客户每个日期范围的最后一个订单

在 PostgreSQL 中:我有一个包含 3 列的表:

CustomerNum, OrderNum, OrderDate.

每个日期范围内每个客户可能有(也可能没有)很多订单。我需要的是位于提供的日期范围内的每个客户的最后一个 OrderNum。我一直在做的是获取客户的 ResultSet 并分别查询每个客户,但这需要太多时间。

有没有办法使用子选择来选择客户,然后为每个客户获取最后一个 OrderNum?

0 投票
2 回答
1540 浏览

sql - 比较同一表中的 2 行的聚合函数 (SQL)

给定表定义:

我想通过一个 SQL 查询得到以下答案:

在哪里:

我怎样才能做到这一点?

感谢您的提示

0 投票
3 回答
229 浏览

sql - 查找每个唯一行的前 n 个

我正在尝试获取表中每个唯一数据行的前 N ​​条记录(我对列bcd进行分组,列a是唯一标识符,列e是我想要的得分1 在这种情况下)。

例如,从这些数据中,我想找到以下行:

有人可以指出我正确的方向来解决这个问题吗?

0 投票
1 回答
4302 浏览

php - Mysql GROUP BY 和 COUNT 用于多个 WHERE 子句

简化表结构:

为此,我有以下 SQL 查询,它简单地将所有具有定义状态的记录加起来。

此查询已被简化,以删除不相关数据和不应影响问题的额外列的 INNER JOINS。

MAX(active_date) 对于特定日期的所有记录都是相同的,并且应该始终选择最近的一天,或者允许从 NOW() 偏移。(这是一个 UNIXTIME 字段)

我想要两个计数:(状态!='OK'和状态!='修复')

AND 的倒数...计数:(状态 = 'OK' OR status = 'Repaired')

并将第一个答案除以第二个答案,得到“percentage_dead”(在后期处理中可能同样快)

对于最近一天或偏移量( - 昨天的 86400 等。)

表包含大约 500k 条记录,并且每天增长大约 5000 条,因此单个 SQL 查询而不是循环将非常好..

我想一些有创意的 IF 可以做到这一点。您的专业知识值得赞赏。

编辑:我愿意对今天的数据或来自偏移的数据使用不同的 SQL 查询。

编辑:查询工作,足够快,但我目前不能让用户在百分比列上排序(从坏计数和好计数得出的列)。这不是一个表演停止者,但我允许他们对其他所有内容进行排序。这个的顺序:

给我:#1247 - 不支持引用“bad_host_count”(引用组函数)

编辑:解决了不同的部分。以下工作并允许我ORDER BY percentage_dead

0 投票
2 回答
144 浏览

sql - 在mysql中聚合结果时选择最新的字符串

我的任务是生成一些关于我们的请求跟踪器使用情况的报告。Request Tracker是我工作的几个部门使用的票务系统。为此,我每晚将有关当天更改的门票的详细信息拍摄到另一个数据库中。这种方法将我的报告与 RT 使用的内部数据库模式分离。

在报告的许多其他问题中,我需要报告每个部门每个月解决了多少票。在 RT 中,部门存储为 CustomField,我的建模遵循这种趋势,正如您在下面的查询中看到的那样。但是,由于我每天晚上抓取快照的方式,一张票有多行,并且部门字段可能会在一个月内发生变化。我只对最近的部门领域感兴趣。我不知道如何在查询中得到它。

我知道我可以使用“GROUP BY”将查询结果减少到每张票一个,但是当我这样做时,我不知道如何获取最后一个部门设置。由于部门都是字符串,因此 MAX() 不会得到最后一个。MySQL 不要求您对正在选择的字段使用聚合函数,但结果是不确定的(从我的测试看来,它可能会抢占我的 MySQL 版本中的第一个)。

为了说明,这里是一个查询的结果,它显示了两张票,以及所有它的部门字段设置:

如我们所见,两张票都在 26 日关闭,并且两张票在首次出现时的几天内都有空的 Department 字段。我在下面包含了我的查询,您可以看到我人为地限制了 where 语句后半部分返回的列数:

如何修改该查询,以便我得到一个结果集,告诉我在 10 月份有一张为“FS 学生”关闭的票和一张为“会议/访客”关闭的票?

0 投票
6 回答
63605 浏览

sql - 查询中的多个最大值

我知道标题听起来不太具有描述性,但这是我能想到的最好的:

我有这张桌子

这实际上是一个非常复杂的查询,封装在一个视图中,但现在不重要了。

我想为每个 ID,包含最高 BDate 的行。在此示例中,这将是结果。

我已经试过了

但随后它返回所有行,因为每个值列都不同。此查询是在 Oracle v10 中设计的,我只能使用选择查询而不是创建过程。