-1

我有以下架构:

配置
1.配置名称
2.配置值
3.otherDataInstanceId

其他数据
1.数据名
2.数据值
3.instanceId

配置otherDataInstanceId链接到 OtherData 的instanceId列。我对 MySQL 中的数据执行了以下查询:

SELECT other.datavalue AS time_stamp, 
configs.configname AS configuration_name, 
configs.configvalue AS configuration_value 

FROM Configurations configs 
JOIN OtherData other 

WHERE configs.otherDataInstanceId=other.instanceId 
AND other.dataname='timestamp' 

GROUP BY configuration_name;

我希望看到这些结果:

2012-01-02 16:05:48      Voltage         10 volts
2000-01-01 12:00:09      Voltage         8 volts
2013-06-01 01:12:32      Voltage         28 volts
2013-07-01 01:12:32      Voltage         5 volts

相反,我只看到:

2012-01-02 16:05:48      Voltage         10 volts

我一直在网上搜索,GROUP BY应该按指定的列获取结果和分组行;所以在我的数据库中,如果我消除了 GROUP BY,我会看到多个configname具有相同值('Voltage')的 s。所以它应该把它们放在一起。但我只看到 1 行'Voltage',而不是 4 - 为什么?

4

1 回答 1

6

GROUP BY configuration_name意思是“我想为每个不同的值设置一行configuration_name”。这意味着您只会得到一排带有configuration_name 'Voltage'.

在你的问题结束时,你提到想要“将它们彼此相邻分组” - 这不是“组”在 SQL 上下文中的含义,而是关于你得到结果的“顺序”。所以你不想GROUP BY configuration_nameORDER BY configuration_name.

事实上,您可能希望所有电压彼此相邻,但是在这些组中,根据它们的时间戳对行进行排序。为此,您只需按顺序指定要排序的多个列,例如ORDER BY configuration_name, time_stamp,它翻译为“按 对结果进行排序configuration_name,然后按等于排序time_stamp”。

于 2013-08-30T00:29:22.567 回答