PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 4
freegas Отправлено: 28 Июля, 2016 - 23:33:02 • Тема: Как получить последнюю цену по каждой позиции? • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 102
Мелкий пишет:
Максимальный id не значит максимальную дату.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT name, cena
  2.   FROM tablename
  3.   JOIN (
  4.     SELECT name, max(date) AS date
  5.       FROM tablename
  6.       GROUP BY name
  7. ) lastdate USING(name, date)

Нужен уникальный индекс по name & date


Спасибо, работает!!!
freegas Отправлено: 28 Июля, 2016 - 23:28:45 • Тема: Как получить последнюю цену по каждой позиции? • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 102
OrmaJever пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT name, cena FROM test WHERE id IN (SELECT max(id) FROM test GROUP BY name)



ЗАРАБОТАЛО!!!!
пол дня потратил, спасибо)) Жаль не могу пока "спасибо" нажать так как новичок(
freegas Отправлено: 28 Июля, 2016 - 22:53:48 • Тема: Как получить последнюю цену по каждой позиции? • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 102
OrmaJever пишет:
Fart пишет:
но он лишний не будет

будет, если добавиться еще один name то что будет? Да и where там не надо, и максимальную цену надо брать, а не дату
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT name, MAX(cena) AS cena FROM TABLE GROUP BY name



Спасибо добрые люди что откликнулись.

Но цену надо брать которая введена последняя (по полю - date - ).
Как написать универсально, если будут появляться ещё - name - (например yellow, blue и т.д.) т.е. не переписывая запрос чтобы он работал?

Таблица имеет вид:
id | name | date | cena
1 | red | 1469735179 | 500
2 | green | 1469735223 | 600
3 | red | 1469735438 | 5
4 | green | 1469735456 | 22

Проверил как работает этот запрос:
SELECT name, cena, MAX(date) AS date FROM tab GROUP BY name
выдаёт:
name cena date
green 600 1469735456
red 500 1469735438
Что не правильно, т.к. date не соответствуют ценам.

SELECT name, cena, MAX(date) AS date FROM `tab` WHERE name = 'red' OR name = 'green' GROUP BY name LIMIT 2 - выдаёт тоже самое.
freegas Отправлено: 28 Июля, 2016 - 21:52:04 • Тема: Как получить последнюю цену по каждой позиции? • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 102
Такая проблемка:
Есть БД с полями
- name - Наименование
- date - дата внесения изменения(в формате UNIX_TIMESTAMP)
- cena - Цена

Как получить последнюю цену по каждой позиции?
Типа:
red 5
green 10

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB