Рассмотрим две таблицы:Выберите Foo с стержневых событий только после определенной даты
Foo:
id INT,
name VARCHAR
Bar:
id INT,
foo_id INT REFERENCES Foo(id),
event SET('hit','miss'),
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
Каждый элемент Foo может иметь несколько событий бар. Как запросить элементы Foo, которые имеют Бар события после определенного времени и времени, но которые также не имеют Бар событий до этого datetime?
Например, рассмотрим:
Foo id=1:
hit 2014-01-21
hit 2014-01-22
hit 2014-01-23
Foo id=2:
hit 2014-01-17
hit 2014-01-19
hit 2014-01-21
Foo id=3:
hit 2014-01-14
hit 2014-01-15
hit 2014-01-18
Foo id=4:
hit 2014-01-21
hit 2014-01-22
hit 2014-01-24
Я хотел бы запросить только те элементы, Foo с хитами на или после 2014-01-20
, так что должен возвращать идентификаторы 1
и 4
.
Я попытался присоединиться к Bar
таблицу к себе, используя несколько вариантов на следующий:
SELECT
b1.id
FROM
Bar b1 JOIN Bar b2 using (foo_id)
WHERE
b1.ts > '2014-01-20';
Однако, я не вижу, как фразу ИНЕК, чтобы исключить любые комбинации, для которых любой даты до 2014-01-20
.
Итак, стол для бара немного похож на таблицу событий? – Strawberry
@Strawberry: Да, точно. – dotancohen