Temat: Rozbicie danych z kolumny
Krzysztof S.:
Witam,
Mam tabele jak ponizej
Identyfikator Pracownik Nazwa Wydzialu Data zdarzenia Godzina REJESTRACJI
3065 Rzadkowolski Wojciech Wydział TJ 2014-01-02 2014-01-02 06:00:00.000
3066 Rzadkowolski Wojciech Wydział TJ 2014-01-02 2014-01-02 14:00:00.000
3067 Prątnicki Wiesław Wydział TJ 2014-01-02 2014-01-02 07:00:00.000
3068 Prątnicki Wiesław Wydział TJ 2014-01-02 2014-01-02 15:00:00.000
3069 Wierzbicki Krzysztof Wydział TJ 2014-01-02 2014-01-02 07:00:00.000
3070 Wierzbicki Krzysztof Wydział TJ 2014-01-02 2014-01-02 13:00:00.000
3071 Wierzbicki Krzysztof Wydział TJ 2014-01-02 2014-01-02 14:00:00.000
3072 Wierzbicki Krzysztof Wydział TJ 2014-01-02 2014-01-02 16:00:00.000
i teraz moj problem polega na tym ze musze rozbic czas REJESTRACJI wg. wytycznych
pierwszy czas REJESTRACJI danego dnia fo czas wejscia drugi czas tego dnia to czas wyjscia trzeci czas to czas wejscia , czwarty czas to czas wyjscia.
Chce kolumne czas rejestracji rozbic na kolumne czasu wejscia i kolumne czasu wyjscia.
Czy ktos moglby pomoc jak to zrobic?
Jeszcze jeden problem, czesto np czas rejestracji ma np 3 wpisy w odstepach 3, 5 sekund spowodowane kilkakrotnym przylozeniem karty do czytnika i istotny powinien pozostac tylko ten pierwszy czas ( dwa pozostale do usuniecia ).
Za pomoc z gory dziekuje
Z datami w odstępie 3-5 sekund nie pomogę bo to trochę więcej zachodu, a poza tym biznesowo trzeba by się zastanowić "a co jeżeli pracownik chciał wyjść ale się rozmyślił i wrócił w ciągu 5 sekund? Która sytuacja jest częstsza? Czy jesteśmy w stanie wykrywać który to przypadek?". Ale zakładając że CTETOP podmienisz sobie na nazwę swojej tabeli, i wywalisz pierwsze CTE, to:
;WITH CTETOP AS(
SELECT
3065 as Identyfikator, 'Rzadkowolski Wojciech' as Pracownik, 'Wydział TJ' as NWydzialu, '2014-01-02' as Data, '2014-01-02 06:00:00.000' as GodzinaR
UNION ALL
SELECT
3066, 'Rzadkowolski Wojciech', 'Wydział TJ', '2014-01-02', '2014-01-02 14:00:00.000'
UNION ALL
SELECT
3067, 'Prątnicki Wiesław', 'Wydział TJ', '2014-01-02', '2014-01-02 07:00:00.000'
UNION ALL
SELECT
3068, 'Prątnicki Wiesław', 'Wydział TJ', '2014-01-02', '2014-01-02 15:00:00.000'
UNION ALL
SELECT
3069, 'Wierzbicki Krzysztof', 'Wydział TJ', '2014-01-02', '2014-01-02 07:00:00.000'
UNION ALL
SELECT
3070, 'Wierzbicki Krzysztof', 'Wydział TJ', '2014-01-02', '2014-01-02 13:00:00.000'
UNION ALL
SELECT
3071, 'Wierzbicki Krzysztof', 'Wydział TJ', '2014-01-02', '2014-01-02 14:00:00.000'
UNION ALL
SELECT
3072, 'Wierzbicki Krzysztof', 'Wydział TJ', '2014-01-02', '2014-01-02 16:00:00.000'
), CTEBOTTOM AS
(SELECT Pracownik, dense_rank() over (partition by Pracownik order by GodzinaR) as ranking FROM CTETOP)
select Pracownik, (case when RANKING%2 = 1 then 'wejscie' else 'wyjscie' end) as Akcja from CTEBOTTOM;