Problem z konwersją funkcji excela na SQL

0

Cześć,

Mam problem z funkcją sql.

Muszę obliczyć pewien parametr z bazy danych.
Robię to póki co to na piechotę, czyli używam poniższej funkcji w sql, aby pobrać dane:
SELECT resolved_by ,short_description ,case_id ,STATUS ,create_date ,resolved_date ,resolution
FROM tickets_book
WHERE assigned_to_group IN ( 'emae' ) AND create_date > '2020-11-17'

przykładowa linijka z wygenerowanymi danymi wygląda na:
resolved_by: asd
case_id: 0531271571
status: closed
create_date: 2020-11-17 08:36:59.0
resolved_date: 2020-11-17 09:38:38.0

następnie generuje dane do excela i resztę, czyli funkcję =NETWORKDAYS(E2,F2)-1-MOD(E2,1)+MOD(F2,1) robię już w excelu:
E2 to create_date natomiast F2 to resolved_date

Chciałbym połączyć funkcję z sql z funkcją z excela. Kombinuje na wysztkie sposoby i oczywiście nic nie działa. Póki co mam coś takiego:
SELECT resolved_by ,short_description ,case_id ,STATUS ,create_date ,resolved_date ,resolution, datediff(day, create_date, resolved_date) - 1 - MOD (create_date, 1) + MOD(resolved_date, 1)
FROM tickets_book
WHERE assigned_to_group IN ( 'emae' ) AND create_date > '2020-11-17'

I wyskakuje błąd:
Invalid operation: function mod(timestamp without time zone, integer) does not exist.

Ma ktoś jakiś pomysł/wskazówkę?

Dzięki!

2

Komunikat mówi o tym, że nie istnieje funkcja MOD, której chcesz użyć. Pobaw się funkcją datediff, a szczególnie jej pierwszym parametrem

0

Widzę, że MOD wykorzystujesz do wyciągniecia godziny z daty, i liczysz dni pracujace, czyli datediff odpada:

Zacznij może od tego:

https://www.sqlshack.com/how-to-calculate-work-days-and-hours-in-sql-server/

0

Dowiedziałem się odnośnie logiki itp, więc wygląda to teraz nieco inaczej:
Chciałbym policzyć ilość rekordów z numerem tygodnia 27.

SELECT count(*) FROM booker.o 
WHERE assigned_to_group 
IN ( 'Writing' )
 AND create_date > '2020-11-08'
AND (DatePart(week, resolved_date) - 1)  = '27'
AND short_description LIKE '%corrective%'

Funkcja:
(DatePart (week, resolved_date) - 1)
przelicza podaną datę na numer tygodnia i to jest wyświetlane poprawnie - wszystko zgadza się z funkcją/dokiem z excela.

Przykład kolumny short_description, z której chce wyciągnąć tylko te dane, które zawierają słowo ,,corrective" : SP-ADDITIONAL CORRECTIVE ND - EU - ResearchRe

Chciałbym wyliczyć liczbę rekordów tylko z 27 tygodniem oraz z opisem zawierającym słowo: ,,corrective”.

Ilość rekordów nie pokrywa się z rekordami z pliku excel, a powinna. Więc coś musi być nie tak z moją składnią. Również kolumna status ma filtr: resloved i closed. Kiedy używam mojej składni, wszystkie rekordy z filtrem,,closed” znikają. Nie mam już pomysłów..

1

Zanim zaczniesz używać datepart z week to poczytaj to: https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15#week-and-weekday-datepart-arguments

Co do reszty to zgadywanie bo w swoim wywodzie nie wspominasz nic o assigned_to_group, Dodatkowo jaką kolację ma baza danych?

2

Ilość rekordów nie pokrywa się z rekordami z pliku excel,

W związku z tym, że tutaj ciężko debagować, to bym najpierw sprawdził zapytanie bez wherów. Potem dodał warunek z grupą, potem kolejne i patrzył w którym momencie mi się rozjeżdża.

btw,

WHERE assigned_to_group
IN ( 'Writing' )

Skoro masz tylko jeden napis, to dlaczego nie zrobisz np. LIKE '%Writing%'?

Przykład kolumny short_description, z której chce wyciągnąć tylko te dane, które zawierają słowo ,,corrective" : SP-ADDITIONAL CORRECTIVE ND - EU - ResearchRe

Sprawdź też, czy na pewno corrective jest wszędzie z małej litery. Możesz zamiast LIKE dać ~* czyli `WHERE assigned_to_group ~* %corrective%. Spowoduje to ignorowanie wielkości znaków. (PostgreSQL)

@lukzar możesz załączyć kilka przykładowych wierszy z pliku?

0

Dziekuje za wskazowki

@.andy

Book1.xlsx

wrzucam 3 pierwsze rekordy z bazy danych

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