在哪里插入" WHERE" -condition到SQL语句中

时间:2015-08-12 07:03:54

标签: mysql

我有以下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部分后面)但是还没有使它工作。

任何人都可以帮助我吗?非常感谢帮助!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'

答案 2 :(得分:0)

根据原则,在大学,我总是了解到这应该设置如下:

  • FROM clause
  • WHERE子句
  • GROUP BY子句
  • HAVING条款
  • SELECT条款
  • 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个科目的课程,按照他们所在的班级对他们进行分组,并按照每个科目的平均分数对结果输出进行排序。学生。