Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Сложный запрос


Автор: Reptor 16.3.2006, 19:59
Усть такая таблица

date unit user_id

2006-03-14 30 3
2006-03-15 10 3


Мне нужно вывести этого юзера еслт только у него за дату 2006-03-15 unitov меньше на 5% чем за дату 2006-03-14. Тоесть в этом примере надо вывести. Ну и саму разницу и также к-тво unitov за 1-ую и 2-ую дату.
Добавлено @ 20:01
Простите что то таблица слилась

date | unit | user_id

2006-03-14 | 30 | 3
2006-03-15 | 10 | 3

Автор: HalkaR 16.3.2006, 22:04
Код

SELECT t1.user_id FROM table AS t1 
INNER JOIN table AS t2 ON t1.user_id=t2.user_id AND DATEDIFF(t1.date,t2.date)=1D AND t1.unit<t2.unit*0.95
что такое, проверить негде.

Автор: Reptor 17.3.2006, 18:12
А зачем тут Left Join c той же самой таблицей?

Автор: Darhazer 17.3.2006, 18:29
JOIN сдесь чтоб было возможно сравнить date в двух рядов из таблице... иначе можеш сравнение делать только между разным полям, а тебе нужно между одинаковим но в разных рядов

Автор: Reptor 17.3.2006, 18:34
а это что означает
Код

DATEDIFF(t1.date,t2.date)=1D 
особенно вотето 1D? И где тут видно что выбираются те даты которые в примере?. Мне надо выбирать имено по конкретным 2-ум датам

Автор: HalkaR 17.3.2006, 19:24
Код

DATEDIFF(day, t1.date,t2.date)=1

вот так правильно
Добавлено @ 19:25
Это работает в MSSQL точно, а в MySQL не знаю, вроде тоже есть.

Автор: Reptor 20.3.2006, 19:51
Ну так где тут установить именно на конкретные 2 даты?

Автор: HalkaR 21.3.2006, 02:35
t1.date и t2.dateб где t1 и t2 алиасы к твоей таблице

Автор: Reptor 21.3.2006, 17:59
Да кстати может я что то путаю но функция DATEDIFF гласит следущее
Цитата

DATEDIFF() returns the number of days between the start date expr and the end date expr2. expr and expr2 are date or date-and-time expressions

Автор: HalkaR 21.3.2006, 18:33
Цитата(Reptor @ 21.3.2006, 17:59)
Да кстати может я что то путаю но функция DATEDIFF гласит следущее
Цитата

DATEDIFF() returns the number of days between the start date expr and the end date expr2. expr and expr2 are date or date-and-time expressions

И в чем проблема?

Автор: Reptor 21.3.2006, 19:37
Зачем она? ведь мне ненадо проверять разницу между датами я её знаю у меня 2 конкретные даты есть.
Вон те даже к примеру что в примере написал.

Автор: HalkaR 21.3.2006, 22:12
Reptor, ну а как ты проверишь равна ли разница между двумя датами 1 дню?

Автор: Reptor 22.3.2006, 17:03
Цитата

Reptor, ну а как ты проверишь равна ли разница между двумя датами 1 дню?


Ну так мне известно что разница 1 день. А что нельзя както в условии поставить что первая дата равна стокото а вторая стокото?

Автор: HalkaR 22.3.2006, 17:24
Reptor, так у тебя только две даты или надо найти все даты удовлетворяющие условию?

Автор: Reptor 22.3.2006, 19:15
HalkaR, да только 2 даты удолетворяющие условию. Но в самом деле их много просто я знаю конкретно по каким надо выбирать и все ну как в том примере что я написал в начале

Автор: HalkaR 22.3.2006, 19:41
А нафига тогда писать запрос? Калькулятор не подойдет?

Автор: Reptor 23.3.2006, 17:28
Цитата

Калькулятор не подойдет?


А ну странный вопрос данные в БД хранятся при чём тут калькулятор просто надо выбрать людей по тем условиям которые я писал изначально или калькулятор может выбрать людей и зделать рассылку и всё это представить в виде интернет странички?

Автор: HalkaR 23.3.2006, 19:47
Reptor, шутка это была
Убери условие с DATEDIFF и поставь вместо него условия с твоими датами.

Автор: Reptor 23.3.2006, 19:58
HalkaR, да попытка пошутить.
Цитата

Убери условие с DATEDIFF и поставь вместо него условия с твоими датами.


вотето вот я и хотел уточнить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)