【问题标题】:Use a Select Min and MAx in your where clause在 where 子句中使用 Select Min 和 MAx
【发布时间】:2018-01-15 15:06:07
【问题描述】:

我正在使用许多选择语句来推动结果,但是我有 2 个选择语句返回约会的最短时间和约会的最长时间。但是,如果最小值和最大值相同,我想从 where 子句中删除。

SELECT
  APPOINTMENTS.userid,
  users.LOCATIONID,
  MIN(APPOINTMENTTIME) AS mintime,
  MAX(APPOINTMENTTIME) AS maxtime

FROM appointments
WHERE APPOINTMENTDATE BETWEEN '2017-01-07' AND '2017-01-07'
AND NOT mintime <> maxtime
GROUP BY appointments.USERID,
         users.LOCATIONID,
         appointments.APPOINTMENTDATE

我收到错误 Mintime is not valid.

我确定我需要将其保存在新的子选择中,但不确定..

干杯

【问题讨论】:

  • 左对齐 SQL 太难读了...

标签: sql max where-clause min


【解决方案1】:

HAVING clause 用于聚合函数,例如

HAVING NOT MIN(APPOINTMENTTIME) <> MAX(APPOINTMENTTIME)

我不知道你为什么在你的谓词中使用双重否定,根据你的描述你只需要&lt;&gt;

HAVING MIN(APPOINTMENTTIME) <> MAX(APPOINTMENTTIME)

【讨论】:

  • 感谢您的快速回复,效果很好。以前没用过。将对该功能进行一些研究.. 一直在学习 :-) 感谢 Garethd
【解决方案2】:

根据 Sql Server 试试这个

        SELECT * FROM (
        select   
        APPOINTMENTS.userid, 
        users.LOCATIONID,
        min(APPOINTMENTTIME) as mintime, 
        max(APPOINTMENTTIME) as maxtime
        from appointments
        where 
        APPOINTMENTDATE between '2017-01-07' and '2017-01-08'

        group by 
        appointments.USERID,users.LOCATIONID,
        appointments.APPOINTMENTDATE
        )as t WHERE  mintime <> maxtime

【讨论】:

    【解决方案3】:

    请尝试

    select   
    APPOINTMENTS.userid, 
    users.LOCATIONID,
    min(APPOINTMENTTIME) as mintime, 
    max(APPOINTMENTTIME) as maxtime
    
    from appointments
    where 
    APPOINTMENTDATE between '2017-01-07' and '2017-01-07'
    
    group by 
    appointments.USERID,users.LOCATIONID,
    appointments.APPOINTMENTDATE
    having min(APPOINTMENTTIME)  <> max(APPOINTMENTTIME)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多