powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подзапрос в выборке Select
14 сообщений из 14, страница 1 из 1
Подзапрос в выборке Select
    #33445172
sas13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, столкнулся с проблемой выборки данных подзапросом
есть табличка: kross с курсами val валют red на дату date и есть табличка с операциями: op_z - где указана сумма val и есть ссылка на валюту red .
Т.е. на каждую операцию необходимо вытащить курс только на эту дату.
Как бы я сделал, в MSSQL, чтобы сделать выборку:

Код: plaintext
1.
2.
SELECT z.val, (SELECT k.val FROM kross k WHERE k.red=z.red AND k.date<=z.date ORDER BY k.date DESC LIMIT  1 ) AS koeff, z.note
FROM op_z z 

Но это не прокатывает в MySql, буду признателен, если кто подскажет решение проблемы.
Версия mySql 4.0.21
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33445219
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ветке 4.0 нету подзапросов. Перепишите запрос через джойн.
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33445919
sas13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DocAlВ ветке 4.0 нету подзапросов. Перепишите запрос через джойн.
Через Join не получится потому как мне нужна только одна запись из связываемой таблицы kross .
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33445942
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sas13 DocAlВ ветке 4.0 нету подзапросов. Перепишите запрос через джойн.
Через Join не получится потому как мне нужна только одна запись из связываемой таблицы kross .Очень даже получится.
Ты хоть попробуй.
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33446029
sas13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал:

Код: plaintext
1.
2.
SELECT z.val, k.val AS koeff, z.note
FROM op_z z LEFT JOIN kross k ON k.red=z.red AND k.date<=z.date 
ORDER BY z.id, kdate DESC

здесь выдается пересечение таблиц, как мне вытащить из таблицы kross только одну запись (если она есть)? какое условие еще надо добавить?
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33446844
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sas13Попробовал:
...
здесь выдается пересечение таблиц, как мне вытащить из таблицы kross только одну запись (если она есть)? какое условие еще надо добавить?
LIMIT ?
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33447271
sas13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Berkut sas13Попробовал:
...
здесь выдается пересечение таблиц, как мне вытащить из таблицы kross только одну запись (если она есть)? какое условие еще надо добавить?
LIMIT ?

LIMIT действует на всю выборку, а мне нужны все записи из таблицы op_z и по одной на каждую из таблицы kross
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33450700
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
SELECT z.val, k.val AS koeff, z.note
FROM op_z z LEFT JOIN kross k ON k.red=z.red AND k.date<=z.date 
WHERE
k.date IN (SELECT MAX(x.date) FROM kross x WHERE x.red=z.red AND x.date<=z.date)
ORDER BY z.id, kdate DESC

на вскидку, если че не так - сильно не бейте :)

насчет оптимальности я конечно молчу :)
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33451745
JackS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык подзапросы не катят :)
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33451786
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мля... был тут такой изврат: выбирается max(concat(date,k.val*0.00001)) и дальше из него на клиенте вытаскивается k.val.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33451799
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эээ... в оригинале были числа. Если строками, то можно и не умножать.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33452316
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данную задачу без подзапросов не решить.
На практике в 4.0 делалось 2 поля, начало и конец действия цены. При добавлении новой цены - отслеживались границы.
Потом естественно достать последние цены было не проблема, в конец ставили 01.01.2500 года.

второй вариант - поставить 4.1, а лучше 5.0 и написать через подзапрос,
Если через ODBC - не проблема в принципе - только нужно set names=cp1251 указать, или какой там у вас чарсет данных в строке инициализации в ODBC...

Выбирайте сами :)
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33452366
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто встречаю подобный вопрос, и странно - тот кто проектирует табличку с интервальными значениями на 3.23 или 4.0 разве не пытается думать как он оттуда будет данные извлекать?
...
Рейтинг: 0 / 0
Подзапрос в выборке Select
    #33454068
sas13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoбыл тут такой изврат: выбирается max(concat(date,k.val*0.00001)) и дальше из него на клиенте вытаскивается k.val.


интересный вариант, спасибо

Валентин КДанную задачу без подзапросов не решить.
На практике в 4.0 делалось 2 поля, начало и конец действия цены. При добавлении новой цены - отслеживались границы.
Потом естественно достать последние цены было не проблема, в конец ставили 01.01.2500 года.

К сожалению база разрабатывается не с нуля, и структура уже работает, разрабатывал не я :(
Мне лишь надо доработать уже существующий вариант клиента.

Валентин Квторой вариант - поставить 4.1, а лучше 5.0 и написать через подзапрос,
Если через ODBC - не проблема в принципе - только нужно set names=cp1251 указать, или какой там у вас чарсет данных в строке инициализации в ODBC...

да работа через ОDBC и ведется

Валентин КЧасто встречаю подобный вопрос, и странно - тот кто проектирует табличку с интервальными значениями на 3.23 или 4.0 разве не пытается думать как он оттуда будет данные извлекать?

Там вообще черт голову сломает что в этой стуктуре... :)
поубывав бы.. (с)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подзапрос в выборке Select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]