SQL选择问题:每天获取最大值

时间:2018-09-03 13:56:02

标签: sql sql-server sql-server-2008 select where-clause

我在选择SQL时遇到问题,我需要获取currentcountDateDebut之间每天的列(DateFin)的最大值,但是返回的结果显示了多个值。

我的SQL语句:

DECLARE @dateDebut DATE, 
        @dateFin DATE, 
        @SITA_METIER VARCHAR(20), 
        @DEFSITE VARCHAR(20);

SET @dateDebut = '01/01/2017';
SET @dateFin = '31/12/2018';


SELECT DISTINCT
    CONVERT(DATE, attemptdate) AS Date, 
    MAX(currentcount) AS MAXUSERS
FROM
    logintracking 
WHERE
    attemptdate BETWEEN CONVERT(DATE, @dateDebut) AND CONVERT(DATE, @dateFin)
    AND logintracking.clientaddr IN ('10.118.254.21', '10.118.254.156') 
GROUP BY
    attemptdate, currentcount

结果:

enter image description here

所需结果:每天(currentcount列仅最大值

PS:attemptdate类型为Timestamp,这就是为什么我需要将其强制转换为简单日期。

我也尝试使用“具有”功能,但仍然获得多个值

1 个答案:

答案 0 :(得分:2)

您已经使用了GROUP BYdistinct毫无意义,因此可以删除distinct

然后,您只需修改CONVERT(Date,attemptdate)而不是attemptdate中的Group by,只需修改group by CONVERT(Date,attemptdate)

select CONVERT(Date,attemptdate) as Date, max(currentcount) as MAXUSERS
from logintracking 
where attemptdate between @dateDebut and @dateFin
  and logintracking.clientaddr in ('10.118.254.21', '10.118.254.156') 
group by CONVERT(Date,attemptdate)

注意:

您的@dateDebut@dateFin已经是Date类型。无需使用CONVERT函数。