Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Составление SQL запроса. Требуется помощь. 
:(
    Опции темы
iddqd
Дата 26.6.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Это снова я со своим SQL smile
Есть две таблицы:
1:
Код (известен)
Глубина
Цена
2:
(Связана с первой. Может быть до 100 записей, относящихся к первой)
Код
Связь - для связи с первой таблицей
Глубина при снятии

И надо высчитать все по формуле:
А - Таблица 1 , столбец: Глубина
В - это константа = 2.
С - Таблица 2, столбец: Глубина при снятии (причем надо получить это из последней записи)
S - Таблица 1, столбец: Цена.

E=(S / (A - B) * (C - B))

Пожалуйста, помогите. Не могу получить последнюю запись для "C" и нормально написать формулу?
Надо делать подзапросы? Если да, то какие?


--------------------
PM MAIL   Вверх
darkness
Дата 26.6.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Цитата

Глубина при снятии (причем надо получить это из последней записи)


Из последней записи, как я понимаю которая содержит  определённый первичный ключ взятый из Таблицы 1
Если конечно я правильно понял...
Код

SELECT "ГЛУБИНА  ПРИ СНЯТИИ" INTO С FROM Таблица2  WHERE т2.Код=(SELECT MAX(т2.Код) FROM Tаблица2 WHERE т2.связь='Значения  внешнего ключа');   /*  C - это переменная в которую ты и сливаешь нужное значение


Добавлено @ 15:41
Другой вопрос: что из себя представляют у тебя в таблицах  "Код" Какой тип?

Это сообщение отредактировал(а) darkness - 26.6.2007, 15:45
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
iddqd
Дата 26.6.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Код - счетчик.
Т2.Связь->Т1.Код

Тот запрос, который ты написал совсем не про то :(

Пример таблиц:
1:
Код Глубина Цена
1----24--------3500
2----26--------4200
3----16--------3900

2:
Код Связь Глубина при снятии
1----1-------22
2----1-------19
3----2-------17
4----1-------9
5----3-------14
6----2-------15
7----2-------6

А хочется получить по формуле:
Например, по второй записе:
E = (4200 / (26 - 2) * (6 - 2)) = 700.
4200 - цена
26 - глубина
2 - константа
6 - глубина при снятии из последней записи
2 - константа


--------------------
PM MAIL   Вверх
darkness
Дата 26.6.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



iddqd, подожди я тебе написал как получить переменную C.... то что ты сейчас привёл я как раз и подразумевал...

Покажи, что в моём запросе не подходит для твоей ситуации...

Это сообщение отредактировал(а) darkness - 26.6.2007, 16:59
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
iddqd
Дата 26.6.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



darkness, извини, что я так отреагировал. Немного недопонял тебя smile
Но как теперь эту C подставить в основную формулу для вычислений?

Добавлено через 2 минуты и 57 секунд
"В качестве входных данных запрос должен иметь хотя бы одну таблицу или запрос" и ошибка встает на следующее слово, после С.


--------------------
PM MAIL   Вверх
darkness
Дата 26.6.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



iddqd, я бы на помощь  призавл такую замечательную вещь как Stored Procedure в качестве оболочки, которая принимает один параметр это Код из таблицы 1

а внутрь бы запихнул огрмный Вложенный Select Запрос,  тем самым можно избежать вообще применение переменных, (хотя на мой взгляд переменные облегчают жизнь намного, особенно во время отладки)...

т.е. 
Код

SELECT (select цена from т1 where код=P)/((select Глубина from т1 where код=P)-P)*((ЗАПРОС см выше только убери из него into C)-P) ;


где P как раз тот входной параметр и есть....

Примерно так... 



Это сообщение отредактировал(а) darkness - 26.6.2007, 17:40
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
iddqd
Дата 26.6.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Студия:
Код

---------------------------
Microsoft Visual Studio
---------------------------
SQL Execution Error.

Executed SQL statement: SELECT (SELECT Цена FROM Шины WHERE Код=2)/((SELECT [Глубина протектора] FROM Шины WHERE код=2)-2)*((SELECT [Глубина протектора при снятии] FROM Движение WHERE Движение.Код=(SELECT MAX(Движение.Код) FROM Движение WHERE Движение.связь=Шины.Код))-P) ;
Error Source: Microsoft JET Database Engine
Error Message: Неопознанная ошибка
---------------------------
ОК   Справка   
---------------------------

Аксес:
"В качестве входных данных запрос должен иметь хотя бы одну таблицу или запрос"



--------------------
PM MAIL   Вверх
darkness
Дата 26.6.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



iddqd, ты лучше покажи исходный код...

Добавлено через 1 минуту и 27 секунд
так стоп! 
Аксес, говоришь..., в нём я не очень силён... не знаю как там у него с хранимыми процедурами и т.д.... Единнственное скажу, что P - как то ты всё равно должен определить... 
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
iddqd
Дата 26.6.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Цитата(darkness @  26.6.2007,  17:46 Найти цитируемый пост)
ты лучше покажи исходный код...

Я прям в аксесе его выполнить пытаюсь.
Блин, вроде такой простой запрос, а такие вещи не получаются :(

Если есть возможность, вот БД (600 кб):
http://webfile.ru/1452069
http://www.rapidshare.ru/326815

Таблицы Шины и Движение соответственно Т1 и Т2.
Спасибо!


--------------------
PM MAIL   Вверх
darkness
Дата 26.6.2007, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



iddqd, у меня нет Аксеса с собой сейчас...
Проверь запрос внимательно, он такой?:
Код

 SELECT (SELECT Цена FROM Шины WHERE Код=2)/((SELECT Глубина протектора FROM Шины WHERE код=2)-2)*((SELECT Глубина протектора при снятии FROM Движение WHERE Движение.Код=(SELECT MAX(Движение.Код) FROM Движение WHERE Движение.связь=Шины.Код))-2) ;



--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
kedicik
Дата 26.6.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Не работает так как надо!
Вот в Access сделала ваш запрос. и выполнила.
чтобы найти последнюю запись. Надо начинать с этого. Постепенно.
SELECT [ГЛУБИНА  ПРИ СНЯТИИ]
FROM Движение
WHERE Движение.Код=(SELECT MAX(Движение.Код) FROM Движение WHERE Движение.связь=2);

Движение.Код=(SELECT ....... воспринимается как входной параметр  .  А здесь никакие входные параметры не нужны. Уже здесь ошибка.
Поэтому надо решить первую часть пока
PM MAIL   Вверх
kedicik
Дата 26.6.2007, 18:52 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



сори! выдавало все равно неправильно. Но поменяла названия длинных полей с пробелами на нормальные  и это заработало. Может проблема в длинных наименованиях полей? поменять пока и попробовать чтобы исключить эту ошибку?
PM MAIL   Вверх
darkness
Дата 26.6.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Цитата

чтобы найти последнюю запись. Надо начинать с этого. Постепенно.

ммм... посмотрите топы выше.. это как раз я и делал...

Цитата

Движение.Код=(SELECT ....... воспринимается как входной параметр  .  А здесь никакие входные параметры не нужны. Уже здесь ошибка.

За аксес я отвечать не берусь, очень плохо знаю его... Попоробовал подобное в MySql всё прошло...





Это сообщение отредактировал(а) darkness - 26.6.2007, 19:02
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
iddqd
Дата 26.6.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Сделал нечто подобное:
Код

SELECT ((Цена / ([Глубина протектора] - 2)) * ([Глубина протектора при снятии] - 2)) as Result FROM Шины, Движение WHERE Шины.Код = (
SELECT     MAX(Код) AS LastIndex
FROM         Движение
WHERE     (Шина = 1))

Только результат немного не тот :(
Никак ошибку найти не могу(

Добавлено через 7 минут и 18 секунд
Код

SELECT ((Цена / ([Глубина протектора] - 2)) * ([Глубина протектора при снятии]-2)) as Result FROM Шины, Движение WHERE Шины.Код = 2 AND Движение.Код=(SELECT Код FROM Движение WHERE Шина=2 AND MAX(Код) = (SELECT MAX(Код)))



--------------------
PM MAIL   Вверх
darkness
Дата 26.6.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



iddqd, навскидку (!могу ошибаться!) - по-моему мало условий равенства.... после выражения добавь 

AND т2.связь=т1.Ключ AND т1.Ключ=1 

Главное ты понял в каком напрвлении копать!  smile
Думаю разберёшься..
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.