MySQL语句,该语句对结果进行分组,但也返回组内另一列的最低值和最高值
好的,这是我的假设表:MySQL语句,该语句对结果进行分组,但也返回组内另一列的最低值和最高值,mysql,Mysql,好的,这是我的假设表: Id Page Timestamp Etc 1 1 2009-10-10 ... 2 1 2009-10-13 ... 3 1 2009-10-14 ... 4 1 2009-10-20 ... 5 2 2009-10-24 ... 6 2 2009
Id Page Timestamp Etc
1 1 2009-10-10 ...
2 1 2009-10-13 ...
3 1 2009-10-14 ...
4 1 2009-10-20 ...
5 2 2009-10-24 ...
6 2 2009-10-27 ...
7 2 2009-11-06 ...
8 3 2009-11-06 ...
9 4 2009-11-07 ...
10 4 2009-11-20 ...
11 4 2009-11-21 ...
我需要的是一个查询,每行返回页码
SELECT * FROM `hypothetical_table` WHERE `Visible` = 1 AND `foo` = 'blargh' GROUP BY `Page` HAVING COUNT(`Page`) >= 1 ORDER BY `Page` ASC
。。。但也会从组内的Timestamp列返回最低值和最高值。因此,在另一面,我可以输出如下内容:
•第1页(从2009年10月10日至2009年10月20日)•第2页(从2009年10月24日至2009年11月6日)
•第3页(2009年11月6日)
•第4页(从2009年11月7日至2009年11月21日) 这在纯MySQL中是否可行?如何:
SELECT `Page`, MIN(`Timestamp`) as StartDate, MAX(`Timestamp`) as EndDate
FROM `hypothetical_table`
WHERE `Visible` = 1
AND `foo` = 'blargh'
GROUP BY `Page`
HAVING COUNT(`Page`) >= 1
ORDER BY `Page` ASC
那么:
SELECT `Page`, MIN(`Timestamp`) as StartDate, MAX(`Timestamp`) as EndDate
FROM `hypothetical_table`
WHERE `Visible` = 1
AND `foo` = 'blargh'
GROUP BY `Page`
HAVING COUNT(`Page`) >= 1
ORDER BY `Page` ASC
我讨厌MySQL
groupby
-当您按页面进行分组时,它返回的Etc
是什么?它是否未定义?我的经验是,它返回代表行的值;您可以按
排序,强制它返回那里的特定行。那么,如果您使用最大值和最小值,会发生什么情况?其他列的值是多少?好问题。让我在某个地方试一下(这种特殊情况下,没有一个准备好的db来测试虚拟值,所以我必须在其他地方试一下)。BRBI它将提升较低的ID值和/或内部层次结构中较早出现的内容。在决定插入它想要的任何值之前,它确实按照它所排序的。该部分似乎根本不受最小/最大值的影响。可能有一种合适的方法可以在continuation中提取特定的值集合,但我不是该问的人。我讨厌MySQLgroupby
-当您按页面进行分组时,它返回什么等
?它是否未定义?我的经验是,它返回代表行的值;您可以按
排序,强制它返回那里的特定行。那么,如果您使用
最大值和最小值,会发生什么情况?其他列的值是多少?好问题。让我在某个地方试一下(这种特殊情况下,没有一个准备好的db来测试虚拟值,所以我必须在其他地方试一下)。BRBI它将提升较低的ID值和/或内部层次结构中较早出现的内容。在决定插入它想要的任何值之前,它确实按照它所排序的。该部分似乎根本不受最小/最大值的影响。可能有一种合适的方法可以在continuation中提取特定的值集合,但我不是要问的人。+1原始查询有*
,虽然在MySQL中有效,但我不确定结果是什么。@Martin:我还考虑了他预期结果的输出,这似乎只显示了这3列。这是一个比我想象的更干净的解决方案。它只在组中有意义,对吗?@Hoatzin:Yes,您需要使用groupby
对每个页面应用聚合MIN
和MAX
函数。+1原始查询有*
,虽然在MySQL中有效,但我不确定结果是什么。@Martin:我还考虑了他预期结果的输出,这似乎只显示了这3列。这是一个比我想象的更干净的解决方案。它只在groupby
上下文中有意义,对吗?@Hoatzin:是的,您需要groupby
将聚合MIN
和MAX
函数应用于每个页面。