Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подзапрос в выборке Select / 14 сообщений из 14, страница 1 из 1
19.12.2005, 19:58:04
    #33445172
sas13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
Добрый день, столкнулся с проблемой выборки данных подзапросом
есть табличка: 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
19.12.2005, 20:50:16
    #33445219
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
В ветке 4.0 нету подзапросов. Перепишите запрос через джойн.
...
Рейтинг: 0 / 0
20.12.2005, 10:59:57
    #33445919
sas13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
DocAlВ ветке 4.0 нету подзапросов. Перепишите запрос через джойн.
Через Join не получится потому как мне нужна только одна запись из связываемой таблицы kross .
...
Рейтинг: 0 / 0
20.12.2005, 11:08:58
    #33445942
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
sas13 DocAlВ ветке 4.0 нету подзапросов. Перепишите запрос через джойн.
Через Join не получится потому как мне нужна только одна запись из связываемой таблицы kross .Очень даже получится.
Ты хоть попробуй.
...
Рейтинг: 0 / 0
20.12.2005, 11:36:46
    #33446029
sas13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
Попробовал:

Код: 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
20.12.2005, 14:54:24
    #33446844
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
sas13Попробовал:
...
здесь выдается пересечение таблиц, как мне вытащить из таблицы kross только одну запись (если она есть)? какое условие еще надо добавить?
LIMIT ?
...
Рейтинг: 0 / 0
20.12.2005, 17:01:25
    #33447271
sas13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
Berkut sas13Попробовал:
...
здесь выдается пересечение таблиц, как мне вытащить из таблицы kross только одну запись (если она есть)? какое условие еще надо добавить?
LIMIT ?

LIMIT действует на всю выборку, а мне нужны все записи из таблицы op_z и по одной на каждую из таблицы kross
...
Рейтинг: 0 / 0
21.12.2005, 23:43:44
    #33450700
Anjey aka PM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
Код: 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
22.12.2005, 12:53:56
    #33451745
JackS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
дык подзапросы не катят :)
...
Рейтинг: 0 / 0
22.12.2005, 13:05:27
    #33451786
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
мля... был тут такой изврат: выбирается max(concat(date,k.val*0.00001)) и дальше из него на клиенте вытаскивается k.val.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.12.2005, 13:08:16
    #33451799
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
эээ... в оригинале были числа. Если строками, то можно и не умножать.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.12.2005, 15:15:25
    #33452316
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
Данную задачу без подзапросов не решить.
На практике в 4.0 делалось 2 поля, начало и конец действия цены. При добавлении новой цены - отслеживались границы.
Потом естественно достать последние цены было не проблема, в конец ставили 01.01.2500 года.

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

Выбирайте сами :)
...
Рейтинг: 0 / 0
22.12.2005, 15:24:27
    #33452366
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
Часто встречаю подобный вопрос, и странно - тот кто проектирует табличку с интервальными значениями на 3.23 или 4.0 разве не пытается думать как он оттуда будет данные извлекать?
...
Рейтинг: 0 / 0
23.12.2005, 12:12:22
    #33454068
sas13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос в выборке Select
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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подзапрос в выборке Select / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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