【发布时间】:2020-07-19 10:07:42
【问题描述】:
有一个表routes包含如下数据:
Id GroupID TickID Data
-------------------------
1 1 1 A
2 1 2 B
3 1 3 C
4 2 1 D
5 2 2 E
6 3 1 F
我有一个 PHP 文件,用户应该能够在其中传递一个“TickID”,并且脚本应该返回:对于每个 GroupID,用户给定 TickID 的数据,但是如果用户传递一个 TickID,它是大于某个 GroupID 中的最大 TickID,应返回该特定 GroupID 的最后一行。
即
UserInput,TickID 1,返回
Id GroupID TickID Data
-------------------------
1 1 1 A
4 2 1 D
6 3 1 F
UserInput,TickID 3,返回
Id GroupID TickID Data
-------------------------
3 1 3 C
5 2 2 E
6 3 1 F
我找到了如何选择“最新”行,即每个 GroupID 的最大 TickID 已经在这里:Retrieving the last record in each group - MySQL
但我不知道如何将它与中间的一系列行结合起来。
编辑 我现在拥有的是: 进行 3 次查询:
第一个查询:为每个组选择最大的 TickID
SELECT GroupID, MAX(TickID) maxTick From routes GROUP BY GroupID
比做两个查询:
一个用于在数据库中确实具有大于用户输入的 TickID 条目的 GroupsID ->
SELECT GroupID, Data From routes WHERE TickID = userTickID GROUP BY GroupID
对没有用户给定的 TickID 的组执行另一个查询:为这些组选择最大的 TickID。 类似于Retrieving the last record in each group - MySQL
似乎是一个很大的不良行为。 有什么改进的办法吗?
【问题讨论】:
标签: mysql