Zapytanie wyświetlające substancje, które były brane tego samego dnia

0

Mam taki problem chcę skonstruować zapytanie, które wyświetli mi listę substancji, ale tylko substancji który były brane w tym samym dniu

Czyli np mamy substancje np. id_substancji 103 i 87 to zapytanie mi wyświetli listę dni gdzie były brane te dwie substancje

Tu jest struktura tabel
Zakładając, że dzień zaczyna się o 05:00 a kończy też o 05:00.
http://sqlfiddle.com/#!9/e8bfdc

0

Sprecyzuj dokładniej problem. Czym innym jest lista wszystkich substancji zaaplikowanych w danym okresie, a czym innym lista dni w których zaaplikowano konkretne substancje, np. 103 i 87.
A najlepiej pokaż jak powinien wyglądać wynik zapytania.

0

Coś takiego

Id substancji Data nazwa
87 2009-09-10 Lek1
103 2009-09-10 Lek2

87 2009-09-12 Lek1
103 2009-09-12 Lek2

0
SELECT 
  distinct CAST("DATA" as DATE), id_substancji 
FROM 
  SPOZYCIE 

domyślam się że Twoja baza to MySql, więc składnia może być nieco inna.
Aby zachować regułę że doba zaczyna się o godzinie piątej nad ranem, od "daty" musisz odjąć pięć godzin. Operacje na dacie i czasie różnią się mocno w zależności o dialektu SQL .
w uproszczeniu tak mogło by to wygjądać

SELECT 
  distinct CAST(("DATA" minus pięć godzin) as DATE),id_substancji 
FROM 
  SPOZYCIE 
0

więc sprecyzuj o co Ci chodzi bo nikt nie będzie zgadywał
BTW
moje zapytanie zwróci Ci wyniki w postaci :

23.04.2009;98;
23.04.2009;99;
23.04.2009;103;
24.04.2009;97;
24.04.2009;98;
24.04.2009;99;
24.04.2009;102;
24.04.2009;103;

0

Mamy wynik leków brane w danych dniach np.

Data nazwa
2009-09-10 lek1
2009-09-10 lek2
2009-09-10 lek3
2009-09-10 lek4

2009-09-11 lek1
2009-09-11 lek2
2009-09-11 lek4
2009-09-11 lek5
No i teraz jak ktoś chce żeby mu wyszukać dwa leki lek4 i lek5 i one mają id przykładowo 10 i 11
No to teraz etap wyszukiwania będzie taki
Data nazwa
2009-09-11 lek4
2009-09-11 lek5
Bo tylko 11-09-2009 te leki były brane jednocześnie.

0

wiesz co to jest klauzula where w zapytaniu ?

0

to masz coś skopane w zapytaniu, pokaż zapytanie ...
BTW komentarze służą do dyskusji wykraczającej poza temat wątku

0
SELECT * FROM `SPOZYCIE` WHERE id_substancji = '107' or id_substancji = '87' GROUP by data2
0

żadna porządna baza nie wykona takiego zapytania, ale MySql to ewenement i łyka Twoje zapytanie

spróbuj tak:

SELECT 
          DISTINCT DATA2, ID_SUBSTANCJI   
FROM 
         `SPOZYCIE` 
WHERE 
         id_substancji = '107' OR id_substancji = '87' 
ORDER by DATA2,ID_SUBSTANCJI
0

Robi dokładnie to co to zapytanie

SELECT * FROM `SPOZYCIE` WHERE id_substancji = '107' OR id_substancji = '87' GROUP BY data2
0

id_substancji jest INT'em , usuń apostrofy

0

na szybko przetestowane na bazie Firebird, działa ....

SELECT 
          DISTINCT DATA2, ID_SUBSTANCJI   
FROM 
         SPOZYCIE
WHERE 
         id_substancji = 103 OR id_substancji = 97 
ORDER BY DATA2,ID_SUBSTANCJI
0

i wywal to grupowanie , bo do niczego nie jest potrzebne. Kluczem jest distinct

2
select date(data-interval '5' hour) dzien from spozycie
where id_substancji in (103,97)
group by 1
having count(distinct id_substancji)=2

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