Выберите 1 строку со значением MIN DATETIME от JOIN для каждой учетной записи - PullRequest
0 голосов
/ 07 июня 2019

Мне нужно выбрать строку с самым старым значением даты и времени в последнем набранном столбце

DATETIME по умолчанию для записи, которая не была набрана: 0001-01-01 00: 00: 00

В настоящее время, если существует учетная запись, у которой есть записи, которые НЕ были набраны, и записи, которые были набраны - она ​​выберет самую старую запись, которая была набрана.

Я запустил SELECT MIN (p.lastdialed) для отдельных учетных записей, чтобы убедиться, что 0001-01-01 00:00:00 является минимальным значением

Зеленые записи должны быть захвачены, желтый - это то, что сейчас захватывается

Я пытался с предложением HAVING и подзапросом безрезультатно

    SELECT 
    d.id,
    p.lastdialed

FROM dbase d
    JOIN phonenumbers p
    ON d.id = p.maindatabaseid

WHERE d.statusname IN ('X'
AND phonestatus NOT IN ('Y')
AND p.lastdialed = (SELECT MIN(p.lastdialed) FROM phonenumbers s WHERE s.maindatabaseid = d.id)


GROUP BY d.id
ORDER BY RAND();

Предполагаемые результаты - получить по одной записи для каждого идентификатора с последним набранным значением MIN DATETIME

1 Ответ

1 голос
/ 07 июня 2019

Я думаю, что это то, что вы хотите:

WHERE d.statusname IN ('X') AND
     phonestatus NOT IN ('Y') AND
     p.lastdialed = (SELECT COALESCE(MIN(s.lastdialed), '0001-01-01 00:00:00')
                     FROM phonenumbers s 
                     WHERE s.maindatabaseid = d.id AND
                           s.lastdialed <> '0001-01-01 00:00:00'
                   );

Подзапрос вычисляет минимальное значение lastdialed для каждой группы во внешнем запросе.

При вычислении учитываются соответствующие записи телефонных номеров, которые НЕ имеют значения по умолчанию, и принимает их минимум. Если ничего не существует, COALESCE() возвращает значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...