我有一个Log
包含以下各列的模型:
["id", "username", "event", "parameters", "extras", "created_at", "updated_at"]
我有索引created_at
和username
。
现在,我想获取由username
排序的每个对象的第一个日志created_at
。
一种方法是对每个用户名运行以下查询:
log = Log.where("username = :username", username: username).order(:created_at).first
但这显然会查询数据库很多次(等于用户名的数量)。有什么方法可以只执行一个数据库查询吗?
另一种情况DISTINCT ON
:
SELECT DISTINCT ON (username) *
FROM log
ORDER BY username, created_at;
返回每个“第一”条目 的整行username
。
这种Ruby语法应该可以工作:
Log.select("DISTINCT ON (username) *").order(:username, :created_at)
问题内容: 如标题所示,我想选择以分组的每组行的第一行和最后一行。 我在此表中包含以下数据: 我需要获取的是列开头的第一个值和列末尾的最后一个值,并按group by group列进行分组。 结果表应如下所示: 我使用和和进行了查询。它可以在SQL Server 2012中使用,但不能在SQL Server 2008中使用。我需要一个可以在SQL Server 2008中执行的查询。 问题答案:
问题内容: 以下是最简单的示例,尽管任何解决方案都应能够扩展到需要n个顶级结果的地方: 给定下面的表格,其中包含“人员”,“组”和“年龄”列,您将如何 获得每个组中 年龄 最大的2个人? (组内的关系不应产生更多结果,而应按字母顺序给出前两个) 所需的结果集: 注意: 这个问题建立在先前的问题上- 获取每组分组的SQL结果的最大值的记录 -用于从每组中获取一个顶行,并且从@Bohemian那里收到
问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: SQL Server:只有GROUP BY中的最后一个条目 我有一个这样的表: 我使用以下查询: 以上查询的结果: 在结果组上方按名称排列行,但显示每个组的第一行。我想从每个组中选择最后一行(按ID)。 例如: 如何编写以上结果的查询。 谢谢 问题答案: 甚至可能不再需要该组。
问题内容: 不幸的是,SQL并不是很容易找到我。我有两个表,一个表和一个表。 贷款支付表: ID(主键),LoanID(与贷款表上的ID匹配),PaymentDate,Amount等。 我需要一条sql语句,该语句可以给我每个月输入的最后一笔付款(如果有的话)。我目前的说法没有给我结果。还存在一个问题,有时在该月的最大日期有时会有平局,因此我也必须能够处理该问题(我的想法是在平局的情况下选择最大的
问题内容: 有一个包含数据的表,如下所示: 如果我运行查询,我将得到的结果为: 什么查询将返回以下结果? 即,应返回每个组中的最后一条记录。 目前,这是我使用的查询: 但这看起来效率很低。还有其他方法可以达到相同的结果吗? 问题答案: MySQL 8.0现在支持窗口功能,就像几乎所有流行的SQL实现一样。使用这种标准语法,我们可以编写每组最多n个查询: 以下是我在2009年为此问题写的原始答案:
问题内容: 假设我有这样的pandas DataFrame: 我想获得一个新的DataFrame,其中每个ID的前2个记录如下: 我可以对分组依据中的记录进行编号: 但是,有没有更有效/更优雅的方法来做到这一点?还有一种更优雅的方法来对每个组中的数字进行记录(例如SQL窗口函数row_number())。 问题答案: 你试过了吗 Ouput生成: (请记住,根据数据,你可能需要先进行订购/排序)