172 похожих чатов

Всем привет, есть ли какой-нибудь способ подбора ближайшей даты? У

меня есть одна джойню одну таблицу с другой по номеру телефона. В первой таблице 1 запись с этим номером, а во второй их 10, но с разными датами. Как можно заджойнить так, чтобы бралась запись со второй таблицы только с самой ближайшей датой к дате с первой таблицы? По итогу должны выходить только одна запись

14 ответов

18 просмотров

Как вариант — какое-нибудь вот такое извращение: select * from mytable t1 join myanothertable t2 on t1.phone = t2.phone and t2.datefield = (select t21.datefield from myanothertable t21 where t21.phone = t2.phone order by @(extract(epoch from t21.datefield) - extract(epoch from t1.datefield)) asc, sign((extract(epoch from t21.datefield) - extract(epoch from t1.datefield))) desc limit 1)

Aza- Автор вопроса
Iurii Shaporenko
Как вариант — какое-нибудь вот такое извращение: ...

Ахаххаах прикольно вариант, сейчас рассмотрю, спасибо:)

SELECT * FROM t1 CROSS JOIN LATERAL ( SELECT * FROM t2 WHERE t2.phone = t1.phone ORDER BY t2.datefield DESC LIMIT 1 ) t2 если хочется получать записи без звонков, заменить CROSS на LEFT и добавить ON TRUE

Aza- Автор вопроса
Maxx
SELECT * FROM t1 CROSS JOIN LATERAL ( SELECT * F...

Ему вроде надо взять со второй таблицы запись у который колонка даты, самая ближайшая к колонке с датой записи в первой таблице А твой вариант получается выберет просто самую свежу дату из второй таблицы

Dmitry Croft
Ему вроде надо взять со второй таблицы запись у ко...

если так, то просто ORDER BY ABS(t1.datefield - t2.datefield)

Maxx
если так, то просто ORDER BY ABS(t1.datefield - t2...

7 дек - 2 дек = |5| 7 дек - 12 дек = |5| Какая дата ближе?

Dmitry Croft
7 дек - 2 дек = |5| 7 дек - 12 дек = |5| Какая д...

И еще ABS работает только с numeric_type, а не все математические операции с датами на выходе дадут его

Dmitry Croft
7 дек - 2 дек = |5| 7 дек - 12 дек = |5| Какая д...

правильно. обе одинаково ближе, обе удовлетворяют условию. вернётся только одна по LIMIT 1

Aza- Автор вопроса
Aza
можно у вас уточнить для чего здесь @?

Чтобы брать разницу в секундах между датами по модулю: в вашем описании не указано было, должна ли быть дата из второй таблицы больше или меньше, чем из первой, поэтому берутся все даты и разница ищется по модулю, при этом если две одинаковые разницы, то дальше через sign сортируем по положительным, потом по отрицательным разницам

Aza- Автор вопроса
Iurii Shaporenko
Чтобы брать разницу в секундах между датами по мод...

Понял, извиняюсь, что не уточнил. Дата во второй всегда больше должна быть, поменяю условие на обычную разницу тогда, спасибо большое еще раз))

Aza
Понял, извиняюсь, что не уточнил. Дата во второй в...

Если дата из второй таблицы должна быть больше, то тогда эта задача решается еще проще select * from mytable t1 join myanothertable t2 on t1.phone = t2.phone and t2.datefield = (select min(t21.datefield) from myanothertable t21 where t21.phone = t2.phone and t21.datefield >= t1.datefield)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта