问题标签 [groupwise-maximum]

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 投票
2 回答
1437 浏览

mysql - SQL - 使用 GROUP BY 获取子查询子集中或连接中的最新记录

我已经为此困惑了一段时间,并意识到是时候寻求帮助了。作为与第三方系统集成的一部分,我在现有系统中引入了一个附加表来管理记录的同步。我将缩小表结构以仅包含足够的细节来呈现问题:

当第三方系统尝试同步记录时,它使用 HTTP GET 请求,服务器端脚本返回一个 XML 响应,其中包含第一次等待同步的记录信息(此 data_id 将不存在同步记录) , 并且还记录等待重试的同步重试在先前尝试中失败的信息(此 data_id 的最新同步记录的结果值为 0)。然后,第三方系统使用 HTTP POST 请求到不同的服务器端脚本,该脚本提供有关它能够匹配和成功同步result = 1的记录 () 以及它不能匹配和同步的记录() 的反馈result = 0, details = "Error Message"

每个数据记录经常会有多个同步记录,因为有许多有效的场景可能会阻止在没有用户首先采取某些操作的情况下成功同步。

记录每次同步尝试很重要,因此仅向数据表添加同步列是不可接受的。

我试图使用 SQL 的伪代码版本是这样的:

  1. 从数据表和每条记录旁边获取所有记录。
  2. 对于这些记录中的每一个,通过匹配 data_id 来找到最新的同步记录,按降序排列同步记录(最新的在顶部),并将同步记录限制为 1(我们只需要最近的同步记录进行此查询)。
  3. 显示数据和最新同步记录中的列。如果不存在同步记录,则仍应显示数据记录,并且同步列只需填充 NULL 值。

到目前为止,我最接近的工作 SQL 语句使用LEFT JOIN

不幸的是,这似乎没有获取最新的同步记录,但GROUP BY data_id似乎只是获取了它找到的第一个同步记录。MySQL 语法不允许我在行ORDER BY date_created DESC前放置一个GROUP BY data_id。如果我将此 ORDER BY 语句放在 GROUP BY 行之后,它似乎不起作用,并且最近的同步记录不是结果中数据列旁边显示的记录。

我开始使用的一个更简单的版本具有完全相同的问题,即不一定采用最新的同步记录:

我也尝试过使用子查询来实现这一点,同样的问题:

请有人建议我如何确定在单个查询中仅获取最新的同步记录以及数据记录。我很高兴该解决方案根据需要包含连接或子查询的任何组合。谢谢你。

0 投票
3 回答
42 浏览

mysql - 如何按最近订单的行分组?

更新:

这是基于 M Khalid Junaid 回答的演示和当前结果。查询仍然没有输出我的预期结果。

我有一个非常简单的表格,这里是值。

这是我的查询,如果latitudelongitudeuser_id相同,我想进行 GROUP 。

当前结果 id = 116

预期结果 id = 118

当我对纬度、经度、uer_id 进行分组时,我想获得最新的结果

我尝试了几种方法,但无法获得预期的结果。

0 投票
1 回答
1554 浏览

mysql - 在sql中选择一组行的最大值的行

我有一个“产品”表,其中包含“名称”和“价格”列。同名有多个价格。该表看起来像

我想要最高价格的行。我试过了

注意:我的问题不是那个,但我想知道解决方案背后的逻辑。谢谢。

0 投票
4 回答
7382 浏览

sql - 优化分组最大查询

此查询即使在数百万行上也能正常工作。但是,从 explain 语句的结果可以看出:

(cost=0.00..23995.15 rows=1240315 width=8)<- 这里它说它正在扫描所有行,这显然是低效的。

我还尝试重新排序查询:

(cost=0.00..23995.15 rows=1240315 width=8)<- 仍在扫描所有行。

我尝试了在 , , 上使用和不使用索引(option_id)(option_id, id)它们(option_id, id desc)都没有对查询计划产生任何影响。

有没有办法在 Postgres 中执行分组最大查询而不扫描所有行?

我以编程方式寻找的是一个索引,它存储每个option_id插入记录表时的最大 id。这样,当我查询 option_id 的最大值时,我应该只需要扫描索引记录的次数与 option_id 不同的次数一样多。

我已经select distinct on从高级用户那里看到了所有的答案(感谢@Clodoaldo Neto 给了我要搜索的关键字)。这就是它不起作用的原因:

太好了,它正在使用索引。然而,使用索引扫描所有 id 并没有多大意义。根据我的执行,它实际上比简单的顺序扫描要慢。

有趣的是,MySQL 5.5 能够简单地使用索引来优化查询records(option_id, id)

0 投票
1 回答
151 浏览

mysql - Left join on last record (simple discussion board with topics, last posts and users)

I'm trying to make a simple discussion board and as a result I need topics titles with their authors and authors of topics last posts.

So far I have this

I got here 10 latest topics titles, their authors usernames and IDs, number of messages in each topic, last ID and date of post in each topic, and everything sorted by activity... basically everything. All I need is authors username of those last posts. I guess I have to make one left join with subquery but I'm kinda stuck. Can someone help me?

0 投票
1 回答
1550 浏览

php - Laravel 获取连接表的最近日期

我正在使用 Laravel 的查询构建器执行此查询,该查询构建器具有左连接,两个表在 column 上链接s_nid。有了我要加入的表格,conference_report有很多行只有一个s_nid,我只想取回最近日期的行。我一直在查看 Groupwise 最大值,这里有一些关于 SO 的示例,这对我来说是新的,我认为这是完成查询所需的,但我不确定如何在我加入的表上实现它。

可能有用的链接:

在 Laravel 4 中执行分组最大值

分组最大值

http://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html

0 投票
1 回答
76 浏览

mysql - 分组时显示加入的最旧结果进行排序

这是我的查询:

assigns表还有一个包含 unix 时间戳的 int 字段,称为the_date.

问题是,表格dealer_name中最旧的行即将出现。assigns我想要表中带有的dealer_name最新行的。id_leadl.idassigns

我该怎么做呢?我想不通。如果我将订单更改为 ,a.the_date我会得到不需要的结果,因为我希望这些按交付日期排序,而不是按分配日期排序。如果有意义的话,我只想要按分配日期排序的经销商名称。

这是我需要的更好的想法,但显然这个查询也不起作用:

最终编辑:我要做的就是将以下内容合并到 1 个单个 SQL 查询中:

这可能吗?我真的太笨了,无法弄清楚这一点。

0 投票
1 回答
325 浏览

mysql - Groupwise maximum in larger query

Really struggling with a query that uses groupwise maximum, any help would be much appreciated. Feel free to point out if I should not be using groupwise maximum.

I have two tables application and email, one application can have many emails. What I'm trying to do in my query is get all details from application and join the email table (I'm actually only getting a foreign key from email for another table which indicates if the email has been replied to), getting the last email sent based on the max(timestamp), which is why I am trying to use groupwise maximum.

I've tried this, but it seems to make a duplicate of each row:

This is what seemed to work at first but is causing issues now and I'm sure it's pretty sloppy code:

Any guidance would be highly appreciated, if you need to see more code please ask! Thanks.

Further clarity if needed for my db set up and what should be happening (left out unimportant parts):

The query should be showing the following:

First solution above shows duplicates of everything (maybe I'm nearly there) and second one shows null for the joined table columns, although I'm sure it did work at one stage or in isolation at least!

0 投票
2 回答
143 浏览

mysql - mysql groupwise max 作为第二个 where 条件

我有一个工作查询似乎非常低效;我想知道我是否缺少一种改进它的简单方法。

简单表:

目标:获取master_id 为零的所有行,或者master_id 不为零并且没有相同master_id 的其他行有更早的日期。按日期排序每个结果。

当前查询,使用分组最小子查询来创建第二个 WHERE 条件。

它有效,但 EXPLAIN 使它看起来效率低下:

我可以改进这个吗?我应该把它分成两个查询,一个用于 ID=0,一个用于分组最小值?提前致谢。

0 投票
2 回答
498 浏览

mysql - MySQL 中的 Pivot - 根据日期时间列显示第一个和最后一个值

经过数小时的研究和尝试,我终于在 Stackoverflow 上注册了,它通过阅读帮助了我多年。非常感谢您提供这次学习机会!我现在希望就我无法解决的 MySQL 问题寻求帮助。我被困住了。

资料来源:我有一张客户订单表。

输出:我想要按电子邮件地址分组的订单,对于每个电子邮件地址,都应该有总营业额的总和,订单计数以及创建的第一个订单和创建的最后一个订单的行。到这里为止,可以通过分组和 min() 和 max() 函数来完成。我被困在哪里:我想要第一个和最后一个订单的 IP 地址,第一个和最后一个订单的名字等等(请参阅下面的所需输出)。

我尝试和研究的内容: Groupwise max,子选择,子选择内部有一个顺序,外部有一个组,几个连接变体。

这是一个带有随机数据的 SQLfiddle 和一个我构建的 sql 查询。它的工作原理是: http ://sqlfiddle.com/#!9/0272b/6

作为 SQLfiddle 中 SQL 的替代方法,我尝试了这个,它适用于一个电子邮件地址:

我也一直在尝试在 where 语句中使用子选择进行子选择或加入,但没有运气:

我实际想要的输出如下所示:

任何帮助表示赞赏!


我问自己的问题:

  • 这可以在 MySQL 中解决吗?在 Excel 中,我可以简单地构建一个数据透视表。
  • 如果没有,我可以通过使用存储过程来解决它,如果订单不超过一个,则遍历所有记录并跳过字段?