Niby prosty select, a jest MASAKRA

0

Witam,

Mam taką tabelę:

id akcja data powiazanie
1 0 2013-11-01 10:00 1
2 1 2013-11-01 11:00 1
3 0 2013-11-01 13:00 2

i potrzebuję zrobić selecta, który wyciągnie mi te dane w następującej postaci:

data akcji 0 data akcji 1 powiazanie
2013-11-01 10:00 2013-11-01 11:00 1
2013-11-01 13:00 null 2
0

Pokaż to zapytanie :)

0

No właśnie nie mam koncepcji jak to ugryźć.. Nawet nie wiem jaki taki rodzaj operacji się nazywa.. Tabela przestawna? Nie wiem jak tego szukać.. W czystym sqlu to jeszcze jestem w stanie sobie jakieś ify wyobrazic ale w nhibernate to będzie kiepsko ;)

2
SELECT powiazanie, Min(Case When akcja=0 Then data End) data_akcji1, Max(Case When akcja=1 Then data End) data_akcji2 FROM tabela GROUP BY powiazanie
0

Co to za baza...

0

MSSQL

0
Marcin.Miga napisał(a):
SELECT powiazanie, Min(Case When akcja=0 Then data End) data_akcji1, Max(Case When akcja=1 Then data End) data_akcji2 FROM tabela GROUP BY powiazanie

To rzeczywiście działa dobrze! Wręcz idealnie.. Jednak ja źle opisałem problem :/

Dane:

id akcja data user_id
1 0 2013-11-01 10:00 1
2 1 2013-11-01 11:00 1
3 0 2013-11-01 12:00 1
4 1 2013-11-01 13:00 1
5 0 2013-11-01 14:00 2

i potrzebuję zrobić selecta, który wyciągnie mi te dane w następującej postaci:

data akcji 0 data akcji 1 user_id
2013-11-01 10:00 2013-11-01 11:00 1
2013-11-01 12:00 2013-11-01 13:00 1
2013-11-01 14:00 null 2

Po akcji 0 zawsze następuje akcja 1 i taki zestaw kolejno występujących akcji tego samego użytkownika tworzy rekord.

1
select [data] data_akcji0, (SELECT [data] FROM tabela WHERE id=(select Min(id) FROM tabela WHERE id>t.id and user_id=t.user_id and akcja=1)) data_akcji1, user_id from tabela t where akcja=0

Akcje NIE MUSZĄ następować bezpośrednio po sobie, ale MUSI być kolejność (wg id) - najpierw 0, potem 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1