我为措辞不好的问题道歉。最好通过一个例子说明我到目前为止所得到的:
表“myInfo”包含列:
1. id (PK)
2. key
3. value
4. metaId
表“meta”包含列:
1. id (PK)
2. metaName
3. metaValue
4. instanceNum
我想在“myInfo”中选择“value”列的不同值。到目前为止,我有:
SELECT DISTINCT mi.key, mi.value
FROM myInfo as mi JOIN metadata as meta
WHERE mi.metaId=meta.instanceNum
AND meta.key = 'timestamp'
AND mi.key='maxWeight';
但我还想要与这些值相关联的时间戳。所以我希望输出看起来像:
key value timestamp maxWeight 10 tons 15:00:05 2011-01-01 maxWeight 5 tons 08:00:07 2011-10-12 maxWeight 25 tons 13:05:09 2013-08-01
我无法将时间戳作为SELECT中的一列,因为它会返回重复的mi.attrValue值,因为时间戳使每一行都是唯一的。我尝试将DISTINCT关键字仅放在mi.attrValue后面,但我收到了MySQL错误。
答案 0 :(得分:0)
这是完全未经测试的,但是由concat 进行分组可能工作。
SELECT mi.key, mi.value, meta.value
FROM myInfo as mi JOIN metadata as meta ON mi.metaId = meta.id
WHERE mi.key = 'maxWeight'
AND meta.key = 'timestamp'
GROUP BY CONCAT(mi.key, mi.value)
虽然您仍然会遇到显示时间戳的问题。例如,如果给定键/值对有3条记录,哪条记录将显示在结果集中?
key value timestamp
maxWeight 10 tons 15:00:05 2011-01-01
maxWeight 10 tons 08:00:07 2011-10-12
maxWeight 10 tons 13:05:09 2013-08-01
按查询分组只显示其中一个结果 - 但是哪个?你需要考虑订购一个团体(这是一个全新的球赛)
答案 1 :(得分:0)
SELECT mi.key, mi.value, min(meta.value)
FROM myInfo as mi JOIN metadata as meta
WHERE mi.metaId=meta.instanceNum
AND meta.key = 'timestamp'
AND mi.key='maxWeight'
group by mi.key,mi.value
使用最早的时间戳值,可以得到你想要的东西。