|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Имеются 2 таблички: Customer IDTelephonePersonContractDate19001112233Иванов Иван Иванович01.01.200029001112233Петров Петр Петрович01.06.200039001112233Семенов Семен Семенович31.12.200049001112244Иванов Семен Семенович01.01.200559001112244Смирнов Иван Семенович01.05.2005 и Detail IDCallDateAbonentOpponentCallDuration105.06.20009013004466900111223320 Требуется для каждой строки из таблицы Detail отобразить данные из таблицы Customer где Max(Customer.ContractDate) <= Detail.CallDate и вот тут затык, т.к. получается трехуровневый запрос, где надо передать дату с первого на третий уровень. Т.е запрос выглядеть должен примерно так: Код: sql 1. 2. 3.
но он не работает И как извернуться? Использовать DLookup() категорически не хочу, для совместимости с другими диалектами SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 21:15 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Было умное сообщение ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 21:16 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Похоже, что не решаема эта задача для Акцеса. Нет у него таких средств. Придется идти другим путем... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 23:11 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Страдалецъ Похоже, что не решаема эта задача для Акцеса. Нет у него таких средств. Придется идти другим путем... Просто, в "других диалектах SQL" это решается тривиально, с помощью оконных функций ... А в Аксовском ANSI SQL-92 будет выглядеть немного "жутковато" :) Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 23:29 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Вы бы показали фрагмент схемы.Я смутно подозреваю что при определенной схеме Ваша задача легко решаема. (отдельные таблицы Person,Tlf справочники и Call главная для них) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 23:39 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Спасибо, за вариант запроса. Попробую его попозже проверить. Я пока крутил это дело вдруг понял, что мне вообще можно обойтись без агрегатов. Ведь мне надо просто получить одну строчку данных, где ContractDate <= CallDate т.е. Код: sql 1.
должна вернуть именно то что мне надо и она в тестовом запросе возвращает именно то что надо, но вот если я этот подзапрос встрою в основной, то в какой-то момент выполнения основного запроса я получаю сообщение, что этот подзапрос возвращает больше чем один результат! Как он может вернуть больше чем один результат, при явной инструкции Top 1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 11:26 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Страдалецъ Требуется для каждой строки из таблицы Detail отобразить данные из таблицы Customer где Max(Customer.ContractDate) <= Detail.CallDate 2. На 2-м и 3-м уровне у вас одна и та же таблица Customer. Зачем? Попробуйте так: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 11:39 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, Дело в том, что из таблицы Customer мне надо вернуть правильного Person и отобразить вместе с Detail. Правильным считается Person где ContractDate <= CallDate из Detail Т.е. есть имеем телефонные переговоры за год, а это таблица Detail и для каждого телефонного разговора надо отобразить опонента, но т.к. владельцем телефона в течении года может оказаться несколько человек, то выбрать надо только того, у которого на момент звонка был действующий договор, а это поле ContractDate из таблицы Customer Именно это я и пытаюсь провернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 12:04 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
одно из основных правил акцесса гласит:если в поле таблицы повторяются значения и это не поле связи или подстановки то такую таблицу надо разбить(можете проверить в анализе таблиц). У Вас в поле Telephone есть повторения, уверен при наполнении данными они будут и в поле Person.При вашей структуре решение простых задач будет очень проблематично или вовсе невозможно. Менять структуру или нет-Ваше личное дело.Удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 13:24 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 14:51 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
sdku, Преобразуйте дату в UNIX time. Так значительно проще ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 19:00 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Решил я эту задачу, пришлось идти другим путем, полностью отказавшись от агрегатов. Код: sql 1.
Но вот для саморазвития хотелось бы понять, каким образом SQL может вернуть больше одного значения при явно заданной инструкции top 1 ? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 20:08 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 00:18 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Нестандартное мышление sdku, Преобразуйте дату в UNIX time. Так значительно проще И чем же это проще, а главное наглядней? 1594849217 а в "человеческом" виде это 15.07.2020, 23:40:17 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 00:45 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Интересно, а Limit и аналогичные инструкции в других SQL-диалектах тоже ведут себя сходным образом? Как-то очень неожиданно узнать, что Top 3 вернет примерно 3 записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 01:44 |
|
Как передать дату в подчиненный запрос третьего уровня.
|
|||
---|---|---|---|
#18+
Страдалецъ Интересно, а Limit и аналогичные инструкции в других SQL-диалектах тоже ведут себя сходным образом? Как-то очень неожиданно узнать, что Top 3 вернет примерно 3 записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 08:51 |
|
|
start [/forum/topic.php?fid=45&msg=39980207&tid=1610010]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
142ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 525ms |
0 / 0 |