Как принимать прошлые записи и предстоящие записи с использованием двух столбцов

64
5

У меня есть два столбца, используя эти два столбца, я должен брать записи из моей БД,

Прошлый EventId Предстоящее событиеId

last eventId означает, что даты (startDate & dueDate) уже завершены, я хочу взять записи

предстоящее eventId означает, какие даты (startDate & dueDate) еще не завершены, я хочу взять записи

события (имя таблицы)

    eventId      name        startDate        dueDate

1 A 2018-01-22 2018-01-22
2 B 2018-01-26 2018-01-27
3 C 2018-01-29 2018-01-31

Я пробовал sql-запрос вроде этого

SELECT * FROM events WHERE startDate >= '2018-01-30' AND dueDate <= '2018-01-30'

Но ничего не происходит, я не могу написать SQL-запрос

Ожидаемое прошлое eventId

eventId
1
2

Ожидаемый предстоящий eventId

eventId
3

спросил(а) 2021-01-19T12:07:45+03:00 6 месяцев, 2 недели назад
1
Решение
64

В вашем запросе будет применено ваше условие для каждой строки, так что оно будет возвращено - это строка, дата начала которой больше, чем "2018-01-30", и дата истечения срока меньше, чем "2018-01-30", что невозможно. поэтому вам нужно написать два запроса, и после этого вы можете взять Союз из двух результатов запроса.

SELECT * FROM events WHERE startDate <= '2018-01-30'
UNION ALL
SELECT * FROM events WHERE startDate >= '2018-01-30' AND DueDate >= '2018-01-30'

Этот запрос вернет один столбец с прошлым и будущим событием. Но вы не сможете определить, какой идентификатор события для прошедшего события и какой идентификатор события для будущего события.

Чтобы определить, что вам нужно написать два разных запроса.

ответил(а) 2021-01-19T12:07:45+03:00 6 месяцев, 2 недели назад
46

За прошлый eventId

select eventId from events where dueDate <= 2018-01-30

предстоящий eventId

 select eventId from events where startDate >= 2018-01-30 or dueDate > 2018-01-30

ответил(а) 2021-01-19T12:07:45+03:00 6 месяцев, 2 недели назад
45

Вы можете попробовать что-то вроде этого:

SELECT
eventId
,case when dueDate < '2018-01-30' then 'Past' else case when duedate > '2018-01-30' then 'Future' END END
FROM Events

ответил(а) 2021-01-19T12:07:45+03:00 6 месяцев, 2 недели назад
45

Проверьте это ссылка

Прошедшие события

SELECT id as 'eventId' FROM events WHERE startDate <= '2018-01-30' AND dueDate <= '2018-01-30';

Будущее событие

SELECT id as 'eventId' FROM events WHERE startDate >= '2018-01-30' AND dueDate >= '2018-01-30';

ответил(а) 2021-01-19T12:07:45+03:00 6 месяцев, 2 недели назад
45

Предполагая, что "2018-01-30" сейчас

прошедшие события:

select * from events where '2018-01-30' <= startDate and dueDate <= '2018-01-30'

событие

select * from events where '2018-01-30' <= startDate and '2018-01-30' <= dueDate 

ответил(а) 2021-01-19T12:07:45+03:00 6 месяцев, 2 недели назад
46

Для прошедшего события:

SELECT * FROM events WHERE startDate <= '2018-01-30' AND DueDate <= '2018-01-30'

Для будущего события:

SELECT * FROM events WHERE DueDate >= '2018-01-30'

ответил(а) 2021-01-19T12:07:45+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема