Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Есть таблица PRICE с ценами на товары с историей их изменения, с полями : datefrom -дата с которой вводится эта цена price_cena - новая цена tovar - код товара magazin- код магазина Цены на товар постоянно меняются с произвольной периодичностью. Мне надо получить прайс на любой день ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 11:49 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Вот упрощенный пример, без магазина. Дальше сообразите сами. Проверял на оракле, поэтому может где-то что-то с синтаксисом. Тоже сообразите. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:04 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Вариант №1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вариант №2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Замени, где выделено, <твоя дата> на интересующую тебя дату и будет тебе счастье. з.ы. есть еще как минимум два варианта решения этой проблемы. Но я тебе их не скажу - ибо один сильно накладный, а второй я уже показывал как-то в пределах этого форума ----------------------------------------------------------------------------------------------------------------------------------------- З.Ы. Неспешно ищу работу, согласен на переезд в Москву или Питер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:07 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор КоневВариант №1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вариант №2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Замени, где выделено, <твоя дата> на интересующую тебя дату и будет тебе счастье. з.ы. есть еще как минимум два варианта решения этой проблемы. Но я тебе их не скажу - ибо один сильно накладный, а второй я уже показывал как-то в пределах этого форума ----------------------------------------------------------------------------------------------------------------------------------------- З.Ы. Неспешно ищу работу, согласен на переезд в Москву или Питер Во втором варианте небольшая неточность при копи/пасте закралась - потерялось условие соединения по коду товата: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:10 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
pamirВот упрощенный пример, без магазина. Дальше сообразите сами. Проверял на оракле, поэтому может где-то что-то с синтаксисом. Тоже сообразите. Код: plaintext 1. 2. 3. 4. 5. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:11 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор Конев pamirВот упрощенный пример, без магазина. Дальше сообразите сами. Проверял на оракле, поэтому может где-то что-то с синтаксисом. Тоже сообразите. Код: plaintext 1. 2. 3. 4. 5. ;) В оракле надо копать в сторону аналитических функций. Вероятнее всего получилось бы (даже уверен, проверять лень). А в постгресе не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:13 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
pamirВ оракле надо копать в сторону аналитических функций. Вероятнее всего получилось бы (даже уверен, проверять лень). А в постгресе не знаю.Никаких аналитических функций. Только встроенный функционал, стандартные (для PostgreSQL) SQL-функции по работе с датой и строками + групповые функции Кстати, аналитические функции тебе и в оракле не помогли бы, таки пришлось бы писать "обертку" - ведь в пределах одного запроса невозможно во фразе WHERE обращаться к результатам работы аналитической функции из секции SELECT этого же запроса. Ибо аналитическая функция отрабатывает после WHERE, GROUP BY, HAVING. То есть на момент выполнения WHERE результатов работы функции не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:28 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор Конев pamirВ оракле надо копать в сторону аналитических функций. Вероятнее всего получилось бы (даже уверен, проверять лень). А в постгресе не знаю.Никаких аналитических функций. Только встроенный функционал, стандартные (для PostgreSQL) SQL-функции по работе с датой и строками + групповые функции Кстати, аналитические функции тебе и в оракле не помогли бы, таки пришлось бы писать "обертку" - ведь в пределах одного запроса невозможно во фразе WHERE обращаться к результатам работы аналитической функции из секции SELECT этого же запроса. Ибо аналитическая функция отрабатывает после WHERE, GROUP BY, HAVING. То есть на момент выполнения WHERE результатов работы функции не существует. Блин, вот я не очень силен в аналит. ф-циях. Поэтому всегда проверяю. Сейчас поленился и вляпался Надо подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:30 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
pamirНадо подумать.Чтобы легче думалось, вот тебе тынц Справедливости ради нужно отметить, что сей подход я подглядел у Elic-а Там если с синтаксисом MySQL не разберешься, то сразу даю подсказку - основная суть подхода в том, что нужно искать максимум / минимум строки, образованой конкатенацией поля с датой в формате yyyymmddhh24miss (время можно во внимание не брать, если цены не меняются по нескулько раз на день) с полем, которое необходимо вытащить на "заданную дату" если в синтаксис PostgreSQL перевести не сможешь, то в понедельник дам верный ответ. А сейчас я уже до дома собираюсь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 15:16 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Да- весьма красивое решение... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 15:34 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
select distinct on (id) id,cena,date from ... where date<? order by id,date desc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 15:50 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
О, а это решение еще краше и без извратов.. Снимаю шляпу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 16:11 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatselect distinct on (id) id,cena,date from ... where date<? order by id,date desc domanixО, а это решение еще краше и без извратов.. Снимаю шляпу... А можно пояснить, что вернет сиё чудо на приведенном domanix-ом наборе данных? Кроме того, если на каждый товар вытащится ровна одна строка с ценой на дату, максимально близкую с низу относитиельно заданной, то зачем тогда в запросе нужна сортировка по полю с датой??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 05:17 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
SELECT DISTINCT ON (expression [, expression ...]) select_list ... где выражение expression может быть вычисляемым полем с использованием столбцов результирующего набора. Если однажды вычисленное значение повторяется вновь - то такая запись игнорируется и не выдается в результирующий набор.А выдается только первая запись. Поэтому в нашем случае нужно сперва отсортировать результат по дате чтобы получить нужный результат. DISTINCT ON (expr..) - фича принадлежащая только постгресу. И не безопасная.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 10:09 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
авторAlternatively, an arbitrary expression can determine what rows are to be considered distinct: SELECT DISTINCT ON (expression [, expression ...]) select_list ... Here expression is an arbitrary value expression that is evaluated for all rows. A set of rows for which all the expressions are equal are considered duplicates, and only the first row of the set is kept in the output. Note that the “first row” of a set is unpredictable unless the query is sorted on enough columns to guarantee a unique ordering of the rows arriving at the DISTINCT filter. (DISTINCT ON processing occurs after ORDER BY sorting.) The DISTINCT ON clause is not part of the SQL standard and is sometimes considered bad style because of the potentially indeterminate nature of its results. With judicious use of GROUP BY and subqueries in FROM the construct can be avoided, but it is often the most convenient alternative. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 10:10 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор Конев LeXa NalBatselect distinct on (id) id,cena,date from ... where date<? order by id,date desc domanixО, а это решение еще краше и без извратов.. Снимаю шляпу... А можно пояснить, что вернет сиё чудо на приведенном domanix-ом наборе данных? Кроме того, если на каждый товар вытащится ровна одна строка с ценой на дату, максимально близкую с низу относитиельно заданной, то зачем тогда в запросе нужна сортировка по полю с датой??? Владимир, я проверил этот вариант на постгресе - как ни удивительно - работает. Надо почитать про distinct в постгресе - видимо он работает иначе, чем в оракле. Получается, что он выдает уникальные по id записи, беря первую (для этого и сортировка). Ушел читать доку :о) PS. А Ваш вариант меня поверг в шок - так просто, но догадаться до него не так уж легко :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 10:12 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
domanixDISTINCT ON (expr..) - фича принадлежащая только постгресу. И не безопасная..Я в доке порылся и сам до этого дошел, но всё равно спасибо за разъяснения. В этом случае мой вариант более универсален, ибо его можно легко адаптировать практически под любую СУБД... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 10:22 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
pamirВладимир, я проверил этот вариант на постгресе - как ни удивительно - работает. Надо почитать про distinct в постгресе - видимо он работает иначе, чем в оракле. Получается, что он выдает уникальные по id записи, беря первую (для этого и сортировка). Ушел читать доку :о)Нет, сам дистинкт работает как и везде - выдает уникальный набор данных из SELECT-LIST-а. А такаое "специфическое поведение" ему "придает" постгресовская фича ON :) pamirPS. А Ваш вариант меня поверг в шок - так просто, но догадаться до него не так уж легко :) А-га, есть такое дело (это про простоту решения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 10:25 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33888331&tid=2006196]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 419ms |

| 0 / 0 |
