sql >> Database teknologi >  >> RDS >> Mysql

Filtrering og gruppering af data fra tabel med nøgle/værdi-par

En del af dit problem er, at du bruger en samlet funktion i SELECT-listen, men du bruger ikke en GROUP BY . Du skal bruge en GROUP BY ligner dette:

GROUP BY d.testId, d.rowId
 

Når du bruger en samlet funktion, og du har andre kolonner i dit valg, skal de være i en gruppe efter. Så din fulde forespørgsel bør være:

select d.testId,
  d.rowId,
  max(if(f.keyName='voltage',f.keyValue,NULL)) as 'voltage',
  max(if(f.keyName='temperature',f.keyValue,NULL)) as 'temperature',
  max(if(f.keyName='velocity',f.keyValue,NULL)) as 'velocity' 
from tests t  
inner join data d 
  on t.testId = d.testId  
inner join data c 
  on t.testId = c.testId 
  and c.rowId = d.rowId  
join data f 
  on f.testId = t.testId 
  and f.rowId = d.rowId  
where (d.keyName = 'voltage' and d.keyValue < 5) 
  and (c.keyName = 'temperature' and c.keyValue = 30) 
  and (t.testType = 'testType1')
GROUP BY d.testId, d.rowId
 

Bemærk, mens din faktiske datastruktur ikke er præsenteret i dit oprindelige spørgsmål. Det ser ud til, at dette kan konsolideres til følgende:

select d.testid,
  d.rowid,
  max(case when d.keyName = 'voltage' and d.keyValue < 5 then d.keyValue end) voltage,
  max(case when d.keyName = 'temperature' and d.keyValue =30 then d.keyValue end) temperature,
  max(case when d.keyName = 'velocity' then d.keyValue end) velocity
from tests t
left join data d
  on t.testid = d.testid
group by d.testid, d.rowid
 

Se SQL Fiddle with Demo . Dette giver resultatet med kun én join til data tabel:

| TESTID | ROWID | VOLTAGE | TEMPERATURE | VELOCITY | ----------------------------------------------------- | 1 | 1 | 4 | 30 | 20 | | 1 | 2 | 4 | 30 | 21 | | 2 | 1 | 4 | 30 | 30 | | 2 | 2 | 4 | 30 | 31 |


  1. Hjælp til:FEJL 1025 (HY000):Fejl ved omdøbning af .... (fejlnr.:150)

  2. omskriv webadresser til produktnavn

  3. Hvordan tager man MySQL Database backup og sætter den i Amazon s3 hver nat ved at bruge Cron fanen?

  4. Sammenlign Facebook-array af vennelister med MySQL-tabellen