Avatar billede friiiiis Novice
15. august 2014 - 14:02 Der er 5 kommentarer og
1 løsning

advanceret dataudtræk

Hej,

Jeg har een tabel:

Variabel  |  DateTime          | Value
VarA      | 13-02-2013 21:19  |  28.19
VarA      | 13-02-2013 21:20  |  28.19
VarA      | 13-02-2013 21:21  |  28.19
VarB      | 13-02-2013 21:19  |  8.19
VarB      | 13-02-2013 21:20  |  38.19
VarB      | 13-02-2013 21:21  |  68.17

Jeg vil gerne hente alle data ud hvor VarB er mindre end 60. Da varB er mindre end 60 kl. 13-02-2013 21:21 skal VarB ikke med og det skal VarA heller ikke... Resultatet bliver derfor:

Variabel  |  DateTime          | Value
VarA      | 13-02-2013 21:19  |  28.19
VarA      | 13-02-2013 21:20  |  28.19
VarB      | 13-02-2013 21:19  |  8.19
VarB      | 13-02-2013 21:20  |  38.19

Jeg kunne forestille mig at man skal klave det med en select statement bare på VarB som man så bagefter laver en inner join på med VarA hvor DateTimje bvruges som join parameter... Det kræver bare at DateTime er nøjagtig ens for at den join vil lykkdes...?
Avatar billede Slettet bruger
15. august 2014 - 14:43 #1
Hvis DateTime er ens:

select * from Tabel
where DateTime in
(select DateTime
from Tabel
where Variabel = 'VarB'
  and Value < 60
)
Avatar billede friiiiis Novice
18. august 2014 - 08:22 #2
Jeg håber det er OK at jeg øger sværhedsgraden lidt...

Hvad så hvis det er 3 variable der skal kigges på?


Variabel  |  DateTime          | Value
VarA      | 13-02-2013 21:19  |  28.19
VarA      | 13-02-2013 21:20  |  28.19
VarA      | 13-02-2013 21:21  |  28.19
VarB      | 13-02-2013 21:19  |  8.19
VarB      | 13-02-2013 21:20  |  38.19
VarB      | 13-02-2013 21:21  |  68.17
VarC      | 13-02-2013 21:19  |  0.19
VarC      | 13-02-2013 21:20  |  8.19
VarC      | 13-02-2013 21:21  |  1.17

VarB < 60 og VarC < 8

Resultatet bliver derfor:

Variabel  |  DateTime          | Value
VarA      | 13-02-2013 21:19  |  28.19
VarB      | 13-02-2013 21:19  |  8.19
VarC      | 13-02-2013 21:19  |  0.19
Avatar billede Slettet bruger
18. august 2014 - 10:05 #3
Der er mange løsning - en kunne være dette:

select * from Tabel
where DateTime in
(select DateTime
from (
select DateTime
      ,sum(case when Value < 60 then 1 else 0 end) x
from Tabel
where Variabel = 'VarB'
    or Variabel = 'VarC'
group by DateTime
) s1
where x >= 2
)
Avatar billede friiiiis Novice
18. august 2014 - 10:15 #4
hmmm... men VarC skulle være større end 8 - hvor indgår det?
Avatar billede Slettet bruger
18. august 2014 - 10:48 #5
Ups! Det overså jeg- prøv dette:

select * from Tabel
where DateTime in
(select DateTime
from (
select DateTime
      ,sum(case when Variabel = 'VarB' and Value < 60
          then 1 else 0 end
          +case when Variabel = 'VarC' and Value < 8
          then 1 else 0 end
          ) x
from Tabel
where Variabel in ('VarB','VarC')
group by DateTime
) s1
where x >= 2
)
Avatar billede friiiiis Novice
18. august 2014 - 11:04 #6
ok - smid et svar -)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester