2015-08-12 7 views
2

У меня есть следующий SQL, который работает просто отлично:Где вставить «ГДЕ» -условие в SQL-заявление

"SELECT t.id, t.date, t.time, t.balance FROM db1 t JOIN (SELECT tt.date, MAX(tt.time) as 'maxtime' FROM db1 tt GROUP BY tt.date) m ON m.maxtime = t.time AND t.date = m.date" 

То, что я хотел бы теперь, чтобы вставить WHERE условия, чтобы включать только данные от конкретных дат. В частности, я хочу использовать WHERE date >= '$dateSelect'. Я не совсем уверен, где мне нужно вставить это условие в запрос, чтобы он работал. Я уже несколько раз пробовал несколько местоположений (всегда за частями FROM db1), но пока не сделал это.

Может ли кто-нибудь помочь мне? Очень ценю помощь!

+1

где должно быть в конце запроса, в случае подзапроса это будет последняя часть этого подзапроса, кроме того, 'where clause' должно быть перед' group by', 'order by' и' limit' –

ответ

0

Поскольку вы используете внутреннее соединение, это предложение where может быть применено либо к запросу верхнего уровня, либо к внутреннему запросу. Лично я бы применил его к и из них. В худшем случае он немного забивает код. В лучшем случае, вы получаете возможность применения дополнительной фильтрации перед присоединением двух результатов оптимизатор, возможно, пропустили в противном случае:

SELECT t.id, t.date, t.time, t.balance 
FROM db1 t 
JOIN (SELECT tt.date, MAX(tt.time) as 'maxtime' 
     FROM  db1 tt 
     WHERE tt.date >= '$dateSelect' -- Here 
     GROUP BY tt.date) m ON m.maxtime = t.time AND t.date = m.date 
WHERE t.date >= '$dateSelect' -- And here 
0
SELECT 
    t.id, t.date, t.time, t.balance 
FROM db1 t 
JOIN (
    SELECT tt.date, MAX(tt.time) as 'maxtime' 
    FROM db1 tt GROUP BY tt.date 
    ) m ON (m.maxtime = t.time AND t.date = m.date) 
WHERE t.date >= '$dateSelect' 
0

В соответствии с принципом, в университете, я всегда узнал, что это должно быть установлено как показано в следующем:

  • ЕКОМ
  • ИНЕКЕ
  • предложения GROUP BY
  • HAVING пункт
  • ВЫБРАТЬ пункт
  • ORDER BY п

Поэтому SQL-образец заявление будет таким:

SELECT studentNo, class, AVG(marks) AS avgMarks, subjects FROM Students 
WHERE age > 18 
GROUP BY class 
HAVING COUNT(subjects) > 5 
ORDER BY avgMarks DESC 

Это возвратит данные для студентов в типичной школе, которые старше чем 18 лет, принимая уроки по более чем 5 предметам, группируя их по классу, в котором они находятся, и заказывая результаты, полученные по средней отметке каждого учащегося.

Смежные вопросы