Postgresql sumowanie recordow na dzien

0

Hej, mam problem z takim oto zapytaniem.

Mam dwie tabele:
user_tab
user_id, name

absence_tab
absence_id, user_id, absence_from, absence_to

Generalnie mam zapytanie ktore wybira mi userow w konkretnym dniu ktorzy byli obecni (czyli nie bylo ich w tabeli absence_tab)

SELECT u.* FROM user_tab u WHERE NOT exists(select 1 from absence_tab a where a.user_id = u.user_id and :date between a.absence_from and a.absence_to)

Natomiast problem mam z zapytaniem ktory jako rezultat zwrocilby mi arraya z parami [dzien, liczba obecnych] gdzie jako argument przekazywany bylby przedzial dat od - do.

dzieki za wskazowki

0
/*
create table users(
  user_id serial primary key, 
  user_name varchar(50) not null unique
);
create table absences(
  absence_id serial primary key, 
  user_id integer,
  absence_from date not null,
  absence_to date not null
);

insert into users(user_name) values('Kaziu'), ('Czesiu'),('Stasiu'), ('Jasiu');
insert into absences(user_id, absence_from, absence_to) 
  values(1, '20170101', '20170110'), (1, '20170201', '20170210'),
        (2, '20170301', '20170303'), (3, '20170201', '20170228');
*/
select dzien::date, count(absence_id) nieobecnych from generate_series('20170101'::date, '20170331'::date, interval '1 day') daty(dzien)  left  join absences on daty.dzien between absence_from and absence_to 
group by 1
order by 1

Lepiej wykorystać LEFT JOIN niż NOT Exists

0

Wprawdzie chodzilo mi o sytuacje w druga strone ale juz sobie to chyba obczaje, tzn zeby zapytanie zwracalo liczbe obecnch ;)

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