J.....Q
J.....Q
#sql #microsoft #sqlserver #bazydanych #bazy

Mireczki mam tabelkę z polami ID, DATA (int, datetime)

Teraz chciałbym dodać ilość dni pomiędzy datami w każdym wyniku. Da się jakoś ?
  • Najlepsze
  • Wszystkie komentarze
a.....m
a.....m
Teraz chciałbym dodać ilość dni pomiędzy datami w każdym wyniku.


@JareQ: Doprecyzuj.
m.....q
m.....q
@JareQ: Masz jedną kolumnę DATA i chcesz różnicę? Do tego trzeba co najmniej dwóch :)
J.....Q
J.....Q
@aaadaaam: No zsumować wartość DATEDIFF(wynik1, wynik2)

Jak np mam:

1 :
J.....Q
J.....Q
@msq: Przeczytaj ostatni wpis :) Chce te różnice pomiędzy rekordami
J.....Q
J.....Q
@JareQ: Niestety nie mogę użyć żadnego języka programowania, wtedy wyciągnąłbym sobie wszystkie rekordy i dodał do siebie róznice dat występującą po każdym rekordzie. (różnice między 1 i 2 rekordem, pozniej 2 i 3 rekordem itd)
a.....m
a.....m
@JareQ: ale chodzi ci o kolejne rekordy, posortowane według id? Różnicę dat liczy się zasadniczo jak ma się przynajmniej dwie kolumny z datą.
J.....Q
J.....Q
@aaadaaam: posortuje sobie je według daty. Ale tak, chodzi o kolejne rekordy.
J.....Q
J.....Q
@JareQ: czyli coś w stylu DATEDIFF(date, date rekordu następnego)
m.....q
m.....q
@JareQ: Najprosciej uzywajac TSQLa, kursora i petli. W pojedynczym selekcie musialbys chyba kombinowac z pivotami, ale i tak nie jestem pewien czy dalo by sie to zrobic.
J.....Q
J.....Q
@msq: Myslalem o tym żeby zrobić funkcję która pętlą WHILE przeleci wszystkie rekordy i doda daty. Dałoby się tak ?
m.....q
m.....q
@JareQ: Funkcja pobiera argumenty i zwraca jeden wynik. Nie moze / nie powinna tez zmieniac danych. Procedura juz tak.
Smiechol
Smiechol
@JareQ:

Użyj podzapytania, aby wyciagnąć datę poprzedniego/następnego. Nie będzie to orzeł wydajności i prędkości, ale zrobi co potrzebujesz.
a.....m
a.....m
Zrób to na widoku...

Ale najlepiej jak pisał msq napisz procedurę z kursorami.
a.....m
a.....m
@JareQ:

Na jednym zapytaniu (nie uwzględnia warunków brzegowych):

Select *.t1, DATEDEFF(t2.DATE,t1.DATE) from tabelka t1, tabelka
singollo
@JareQ: @aaadaaam: Ja wymyśliłem coś takiego:

select t1.id, t1.date, datediff(t1.date, max(t2.date))
plushy
@JareQ: Uczcie się okieniek młodzieży

SELECT SUM(DATEDIFF(data,lag)) FROM (SELECT data, LAG OVER (ORDER BY ID) as lag FROM table) AS q
J.....Q
J.....Q
@plushy: Warto dodać że używam ms sql 2012 server express. OVER niestety coś wywala błąd. "Incorrect syntax over"
plushy