Sql 获取两个日期之间的最小值和最大值

Sql 获取两个日期之间的最小值和最大值,sql,sql-server,Sql,Sql Server,我正在查询下面的代码,以获取min、max和avg,但仍然给我带来了一个问题,因为它查询的是我从name='Jose'得到的所有行,而不是min、max和avg SELECT CONVERT(CHAR(10), DATA, 120) AS DATA, MIN([VALUE]) AS MinValue, AVG([VALUE]) AS MedValue, MAX([VALUE]) AS MaxValue FROM databasename WHERE (name = 'Jose') GROU

我正在查询下面的代码,以获取min、max和avg,但仍然给我带来了一个问题,因为它查询的是我从
name='Jose'
得到的所有行,而不是min、max和avg

SELECT CONVERT(CHAR(10), DATA, 120) AS DATA, 
MIN([VALUE]) AS MinValue, 
AVG([VALUE]) AS MedValue, 
MAX([VALUE]) AS MaxValue
FROM databasename
WHERE (name = 'Jose')
GROUP BY CONVERT(CHAR(10), DATA, 120)
ORDER BY DATA ASC
我从第一个查询中得到的示例: (无法嵌入图像)

为了查询两个日期,我使用了下面的代码,但它没有从查询中得到任何结果

SELECT CONVERT(CHAR(10), DATA, 120) AS DATA, 
MIN([VALUE]) AS MinValue, 
AVG([VALUE]) AS MedValue, 
MAX([VALUE]) AS MaxValue
FROM databasename
WHERE [DATA] between '2017-02-01' AND '2018-03-10' AND name = 'Jose'
GROUP BY CONVERT(CHAR(10), DATA, 120)
ORDER BY DATA ASC
我正在使用MSSQL数据库

更新: 我已经可以在两个日期之间进行查询,正如您在第二个查询中看到的那样。问题是我没有得到唯一的最小值,最大值和平均值。 图片:


< P>你能考虑你的查询

的小变化吗?
SELECT CONVERT(CHAR(10), DATA, 120) AS DATA,
MIN([VALUE]) AS MinValue,
AVG([VALUE]) AS MedValue,
MAX([VALUE]) AS MaxValue
FROM databasename
WHERE CONVERT(CHAR(10), DATA, 120) between CONVERT(CHAR(10), 2017 - 02 - 20, 120) AND
CONVERT(CHAR(10), 2018 - 02 - 25, 120) AND name = 'Jose'
GROUP BY CONVERT(CHAR(10), DATA, 120)
ORDER BY DATA ASC
尝试此SQL查询转换(日期'2017-02-01')


尝试查看
选择CONVERT(CHAR(10),2017-02-20220)
的结果,您将看到它为什么不检索数据。永远不要将日期用作字符串。Ups,此操作失败。我也更改为date,但没有转换,但它查询我的所有数据,而不是min、max和Avg。对于第二次查询,您需要在日期周围加引号。@AntonioJose是否希望每个日期都有average、max和min值?在“2017-02-01”和“2018-03-10”之间,您知道在转换(字符(10),数据,120)的地方执行此操作的不良性能吗?SQL Server必须转换每一行,然后进行比较。@DawoodAwan,因为它没有说明数据存储日期的格式,我们还可以建议其他格式。问题不在于绩效,而在于没有取得结果。欢迎提出建议。感谢您
CONVERT(CHAR(10),2017-02-20120)
实际上返回varchar值
1995
,因为它是2017减去2减去20(缺少字符串引号),而不是OP想要的值。
SELECT DATA AS DATA, 
MIN([VALUE]) AS MinValue, 
AVG([VALUE]) AS MedValue, 
MAX([VALUE]) AS MaxValue
FROM databasename
WHERE [DATA] between CONVERT(DATE, '2017-02-01') AND CONVERT(DATE, '2018-03-10') 
  AND name = 'Jose'
GROUP BY CONVERT(DATE, '2017-02-20')
ORDER BY CONVERT(DATE, '2017-02-20') ASC