MYSQL - zapytanie zliczające czas odbytych już wydarzeń w danym miejscu

0

Witajcie!
Mam problem z zapytaniem do bazy MySQL - chciałbym zliczać czas trwania wydarzeń łącznie dla każdego miejsca, ale tylko tych wydarzeń które się już wydarzyły, tj. zapytanie musiało by mieć zawarty w jakiś sposób warunek jeśli DataZakonczeniaWydarzenia<NOW()

Kawałek bazy danych:

CREATE TABLE Miejsce( 
Nazwa VARCHAR(11) NOT NULL PRIMARY KEY,
Adres VARCHAR(50)
);

CREATE TABLE Wydarzenie(
WydarzenieID INT AUTO_INCREMENT PRIMARY KEY,
Nazwa VARCHAR(10) NOT NULL,
DataRozpoczeciaWydarzenia DATETIME NOT NULL,
DataZakonczeniaWydarzenia DATETIME,
CzasTrwania TIME,
FOREIGN KEY (Nazwa) REFERENCES Miejsce(Nazwa)
);

Zrobiłem już takie zapytanie:

SELECT
Miejsce.Nazwa,
Miejsce.Adres,
DATE_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(Wydarzenie.CzasTrwania))),'%H:%i') 
FROM Wydarzenie
RIGHT JOIN Miejsce
ON Wydarzenie.Nazwa=Miejsce.Nazwa 
GROUP BY Miejsce.Nazwa 
ORDER BY Miejsce.Nazwa;
  • zlicza ładnie godziny wydarzeń, lecz wszystkie, nawet te które dopiero się odbędą. RIGHT JOIN zrobiłem ponieważ w wynikach mają się wyświetlać też miejsca dla których nie ma żadnych zadeklarowanych wydarzeń - a liczba godzin będzie po prostu pusta.

Z góry dzięki za pomoc :)

0

No i bardzo dobrze zlicza. Jeśli chcesz żeby zliczało przeszłe czasy to wystarczy dodać between albo <>= sysdate czy to co tam jest w MySQL do wyświetlenia daty obecnej, oczywiście musisz to też skonwertować.

0
kate87 napisał(a):

No i bardzo dobrze zlicza. Jeśli chcesz żeby zliczało przeszłe czasy to wystarczy dodać between albo <>= sysdate czy to co tam jest w MySQL do wyświetlenia daty obecnej, oczywiście musisz to też skonwertować.

No właśnie o tym też napisałem ( NOW() ) - ale nie mam pojęcia gdzie to wkleić ;) Próbowałem, ale robiło różne cuda :/

EDIT: Nadal nic, stoję w miejscu...

1

Hmm... nie do końca rozumiem, które godziny faktycznie chcesz zliczać. Piszesz, że chcesz zliczać czas trwania wydarzeń, które jeszcze się nie wydarzyły, a potem piszesz, że Twoje zapytanie zlicza wszystkie nawet, te które dopiero się odbędą.
Te, które się jeszcze nie wydarzyły to te, które się dopiero odbędą.

Zakładam, że chcesz zliczyć czas tych, które się już zakończyły:

SELECT
  Miejsce.Nazwa,
  Miejsce.Adres,
  DATE_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(Wydarzenie.CzasTrwania))),'%H:%i') 
FROM 
  Miejsce
  LEFT JOIN Wydarzenie ON Wydarzenie.Nazwa=Miejsce.Nazwa AND Wydarzenie.DataZakonczeniaWydarzenia < NOW()
GROUP BY Miejsce.Nazwa 
ORDER BY Miejsce.Nazwa
;

Zamieniłem RIGHT JOIN na LEFT JOIN, bo tak chyba jest bardziej intuicyjnie - częściej się stosuje LEFT JOINY niż RIGHT JOINY.

[Adam]

0
kchteam napisał(a):

Hmm... nie do końca rozumiem, które godziny faktycznie chcesz zliczać. Piszesz, że chcesz zliczać czas trwania wydarzeń, które jeszcze się nie wydarzyły, a potem piszesz, że Twoje zapytanie zlicza wszystkie nawet, te które dopiero się odbędą.
Te, które się jeszcze nie wydarzyły to te, które się dopiero odbędą.

Zakładam, że chcesz zliczyć czas tych, które się już zakończyły:

SELECT
  Miejsce.Nazwa,
  Miejsce.Adres,
  DATE_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(Wydarzenie.CzasTrwania))),'%H:%i') 
FROM 
  Miejsce
  LEFT JOIN Wydarzenie ON Wydarzenie.Nazwa=Miejsce.Nazwa AND Wydarzenie.DataZakonczeniaWydarzenia < NOW()
GROUP BY Miejsce.Nazwa 
ORDER BY Miejsce.Nazwa
;

Zamieniłem RIGHT JOIN na LEFT JOIN, bo tak chyba jest bardziej intuicyjnie - częściej się stosuje LEFT JOINY niż RIGHT JOINY.

[Adam]

Masz rację, poprawiłem pierwszego posta, moje niedopatrzenie.
Chodziło mi rzecz jasna o wyliczanie czasu trwania wydarzeń które już się odbyły.

Wielkie dzięki, zapytanie działa pięknie :)

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