powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / SQL запрос для формирования прайса.
9 сообщений из 9, страница 1 из 1
SQL запрос для формирования прайса.
    #36878820
DeathFoggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствйте! В поиске не нашел! Имею такой вапрос каторый уже давно все меня мучает. Имею базу, точнее таблицу в БД каторая состоит из полей: Название Услуги - Дата - Стоимость. Надо сформировать прайс лист на определенную дату, как это возможно сделать? Моего знания SQL хватает только на:

авторSELECT DISTINCT U_name, U_Price, Max(U_Date)
FROM Uslugi
GROUP BY U_name, U_Price;
тут я не беру дату конкретную, сформировать бы прайс лист за весь промежуток сначало, т.е. из последних дат на каждую услугу

Но этого недостаточно так, как не учитываются повторения, хотя и использую DISTINCT.
т.е. имеется список из услуг(могут повторятся) и ценами и датой. Я логически понимаю что тут одновременно как-то надо найти последнюю(макс дату)на каждую услугу(то есть и отсеять повторения). Как это можно реализовать с помощью SQL? Прайс лист на определенную дату?

Название ---- Цена ------- Дата
Продажа ---- 100 ---- -- 01.10.2010
Покупка ---- 300 ---- ---- 02.10.2010
Продажа ---- 150 ---- ----03.10.2010
Покупка ---- 200 ---- ----05.10.2010
Покупка ---- 235 ---- ----04.10.2010

вводим 06.10.2010 тоесть находим все услуги по ценам которые были последними добавленными до этого числа
в итоге :

Покупка ---- --- 200 ---- --- 05.10.2010
Продажа ---- --- 150 ---- --- 03.10.2010


Спасибо заранее!
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36879397
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как минимум таблицы должно у вас быть 2: 1-я - это список услуг, 2-я - это ид услуги, дата, цена
А впосле выбирайте на здоровье:
Код: plaintext
1.
2.
3.
select * from T1 left join 
T2 on T2.usluga_id = T1.id and  T2.id in 
(select TOP  1  id from T2 where T2.date <= @искомая дата and T2.usluga_id = T1.id ORDER BY T2.date desc)
как-то так, может не заработать, спать хочу :)
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36879639
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам подойдет вот это Периодические сведения и Организация периодических сведений
В Вашей модели это будет выглядеть так:
Код: plaintext
1.
2.
3.
4.
SELECT U.U_name, U.U_Price, T.MaxDate
FROM 
  (SELECT U_name, Max(U_Date) as MaxDate FROM Uslugi GROUP BY U_name) as T
INNER JOIN Uslugi as U 
  ON (U.U_Date=T.MaxDate) AND (U.U_name=T.U_name)
В модели где хранятся как начальные данные так и конечные (последние конечные даты устанавливаются заранее недостижимой датой) будет так:
Код: plaintext
1.
2.
SELECT U.U_name, U.U_Price, U.U_BeginDate
FROM Uslugi as U 
WHERE :Today BETWEEN U.U_BeginDate AND U.U_EndDate 
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36881041
DeathFoggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf
авторSELECT U.U_name, U.U_Price, U.U_BeginDate
FROM Uslugi as U
WHERE :Today BETWEEN U.U_BeginDate AND U.U_EndDate

Что то я вот это не пойму :Today это параметр какой-то? можно вот про эти строчки поподробнее
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36881081
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeathFoggyNaf
авторSELECT U.U_name, U.U_Price, U.U_BeginDate
FROM Uslugi as U
WHERE :Today BETWEEN U.U_BeginDate AND U.U_EndDate

Что то я вот это не пойму :Today это параметр какой-то? можно вот про эти строчки поподробнее

:Today это дата на которую вы ищете данные.
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36881285
DeathFoggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то есть я так понимаю для реализации прайс листа за конкретную дату конструкцию
авторSELECT U.U_name, U.U_Price, U.U_BeginDate
FROM Uslugi as U
WHERE :Today BETWEEN U.U_BeginDate AND U.U_EndDate

надо будет вставить в

авторSELECT U.U_name, U.U_Price, T.MaxDate
FROM
(SELECT U_name, Max(U_Date) as MaxDate FROM Uslugi GROUP BY U_name) as T
INNER JOIN Uslugi as U
ON (U.U_Date=T.MaxDate) AND (U.U_name=T.U_name)

Так?
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36881506
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не против:
Код: plaintext
1.
2.
3.
4.
SELECT U.U_name, U.U_Price, T.MaxDate
FROM 
  (SELECT U_name, Max(U_Date) as MaxDate FROM Uslugi WHERE U_Date<=:Today GROUP BY U_name) as T
INNER JOIN Uslugi as U 
  ON (U.U_Date=T.MaxDate) AND (U.U_name=T.U_name)
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36881508
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeathFoggyто есть я так понимаю для реализации прайс листа за конкретную дату конструкцию
авторSELECT U.U_name, U.U_Price, U.U_BeginDate
FROM Uslugi as U
WHERE :Today BETWEEN U.U_BeginDate AND U.U_EndDate

надо будет вставить в

авторSELECT U.U_name, U.U_Price, T.MaxDate
FROM
(SELECT U_name, Max(U_Date) as MaxDate FROM Uslugi GROUP BY U_name) as T
INNER JOIN Uslugi as U
ON (U.U_Date=T.MaxDate) AND (U.U_name=T.U_name)

Так?
не совсем, это две разные модели данных, запросы соответственно к ним разные
...
Рейтинг: 0 / 0
SQL запрос для формирования прайса.
    #36882400
DeathFoggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf спасибо большое помог, вроде разобраться! Теперь дело за малым ))) еще подключаю Access БД к Delphi)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / SQL запрос для формирования прайса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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