|
|
|
как правильно оформить SELECT
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста, как правильно оформить запрос... Есть база в MySQL, одна из таблиц которой ежедневно полняется информацией о продажах товаров в нескольких торговых точках. Каждый товар имеет уникальный код. Структура таблицы My_table: ( MAG_ID Numeric(3), идентификатор магазина DATA Date, дата продажи SMENA Numeric(1), номер смены KOD Char(7), код товара NAME Char(70), наименование товара CENA Numeric(8,4), цена NAL Numeric(4), наличие единиц товара на начало смены REAL Numeric(4), продано единиц товара за смену OK Numeric(4), остаток единиц товара на конец смены ... ) Количество смен в каждом магазине в каждый день произвольное (<=10, но обычно не больше 3-х, 0-первая смена) Требуется определить остатки товаров на конец определенного дня, т.е. знаем конкретную дату, и остатки надо брать из последей смены каждого магазина. Допустим, надо вытащить остатки товаров на конец дня в конкретном магазине (MAG_ID=7). Пробовал так: SELECT KOD, MAX(SMENA) AS LastSmena, NAME, CENA, OK FROM My_table WHERE MAG_ID=7 AND DATA="2005/01/24" GROUP By KOD ORDER By KOD В итоге LastSmena равно номеру последней смены в этот день, а вот CENA и OK берутся из смены с минимальным номером (т.е. 0). Подскажите, пожалуйста, что не так. Заранее благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:02 |
|
||
|
как правильно оформить SELECT
|
|||
|---|---|---|---|
|
#18+
Обычно в GROUP BY перечисляются все поля, не входящие в групповую функцию (Oracle, например, в противном случае выдает ошибку) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:14 |
|
||
|
как правильно оформить SELECT
|
|||
|---|---|---|---|
|
#18+
tru55Обычно в GROUP BY перечисляются все поля, не входящие в групповую функцию (Oracle, например, в противном случае выдает ошибку) GROUP BY нужно на случай, если выборка ведется по нескольким магазинам, тогда одинаковые коды группируются: SELECT KOD, MAX(SMENA) AS LastSmena, NAME, CENA, OK FROM My_table WHERE MAG_ID=IN(3,7,80) AND DATA="2005/01/24" GROUP By KOD ORDER By KOD Да и без него этот запрос не работает. Видимо, надо добавить условие в оператор WHERE, чтобы выбирались только строки с максимальным значением смены, только как это сделать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:45 |
|
||
|
как правильно оформить SELECT
|
|||
|---|---|---|---|
|
#18+
Если условие неизвестно к началу работы запроса, используют подзапрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:10 |
|
||
|
как правильно оформить SELECT
|
|||
|---|---|---|---|
|
#18+
tru55Если условие неизвестно к началу работы запроса, используют подзапрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. Отдельно подзапрос Код: plaintext 1. 2. 3. Но дело в том, что 3 - это номер последней смены в магазинах MAG_ID=31 и MAG_ID=70 за 2005/01/24. Предположим, что вложенный запрос работает. Тогда, если надо вытащить остатки в последних сменах в магазинах MAG_ID=3, MAG_ID=7, MAG_ID=80 за 2005/01/24, у которых номера последних смен 2, 2 и 1 соответственно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А надо, чтобы выдал записи за смену nr.2 для магазина nr.3, за смену nr.2 для магазина nr.7, за смену nr.1 для магазина nr.80 ! Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 14:21 |
|
||
|
как правильно оформить SELECT
|
|||
|---|---|---|---|
|
#18+
Тогда так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Смысл - попарное равенство mag_id и smena результатам подзапроса. Правда не знаю, работает ли такая конструкция в MySQL (в Oracle - работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 14:42 |
|
||
|
как правильно оформить SELECT
|
|||
|---|---|---|---|
|
#18+
1.9.4.1 Вложенные SELECTы В сервер MySQL поддерживает вложенные запросы вида INSERT ... SELECT ... и REPLACE ... SELECT .... В других контекстах можно использовать и функцию IN(). Вложенные операции выборки реализованы в версии 4.1. Это из мануала. У меня v4.0.18. Вложенные запросы не работают. Попробую поставить v4.1.1alfa, напишу, что получится. Хотя, в том же мануале пишут, что вроде в некоторых случаях вложенный запрос можно реализовать через JOIN . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 16:12 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32880933&tid=1854404]: |
0ms |
get settings: |
7ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
39ms |
get forum data: |
3ms |
get page messages: |
117ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 511ms |

| 0 / 0 |
