sql查询时间最小值的列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询时间最小值的列相关的知识,希望对你有一定的参考价值。

数据库里有一些字段,其中有一列时间,是用datetime自动获取的值,现在想查询最早日期的一条记录,不知道这个日期最早该怎么查询呢?谢谢!

可以参考下面的方法:

1、将查询的结果按照时间列从小到大排序,也就是正序排序,只取第一条就行

SELECT TOP 1 * FROM tb ORDER BY 时间列 ;

2、另外可以使用子查询

SELECT * FROM tb WHERE 时间列=(SELECT MIN(时间列) FROM tb);

扩展资料:

SQL参考语句

AVG(字段名) 得出一个表格栏平均值

COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计

MAX(字段名) 取得一个表格栏最大的值

MIN(字段名) 取得一个表格栏最小的值

Alter table tabname add primary key(col)添加主键

Alter table tabname drop primary key(col)删除主键

参考资料来源:百度百科-结构化查询语言

参考资料来源:百度百科-sql语句

参考技术A 1、将查询的结果按照时间列从小到大排序,也就是正序排序,只取第一条就行
SELECT TOP 1 * FROM tb ORDER BY 时间列 ;
2、另外可以使用子查询
SELECT * FROM tb WHERE 时间列=(SELECT MIN(时间列) FROM tb);
参考技术B SELECT * FROM TABLE WHERE 时间= (SELECT min(时间)FROM TABLE)

这样应该就可以了!

本回答被提问者和网友采纳
参考技术C 表名:table1, 列名:time1

select top 1 time1, * from table1
where time1 is not null

order by time1 asc
参考技术D select min(时间) from 表追问

好像我没有表达清楚,我想查日期最早的完整的记录,不是只要这个日期,这样该怎么写呢?

追答

select * from 表 where 时间=(select min(时间) from 表)

SQL查询以选择具有最小值的不同行

【中文标题】SQL查询以选择具有最小值的不同行【英文标题】:SQL query to select distinct row with minimum value 【发布时间】:2013-02-23 20:24:48 【问题描述】:

我想要一条 SQL 语句来获取具有最小值的行。

考虑这张表:

id  game   point
1    x      5
1    z      4
2    y      6
3    x      2
3    y      5
3    z      8

如何选择在point 列中具有最小值的ID,按游戏分组?像下面这样:

id  game   point    
1    z      4
2    y      5
3    x      2   

【问题讨论】:

您需要加入同一张表才能获得所需的结果。在答案中检查下面的查询。 为什么你的结果中游戏“y”点值是 6 而不是 5? 由于 OP 没有回应,我只能假设他的意思是问“按 id 分组”,并显示哪个游戏得分最低... 【参考方案1】:

试试:

select id, game, min(point) from t
group by id 

【讨论】:

我收到此错误“列 'student.point' 在 HAVING 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。” 这不会得到想要的结果。因为您需要将查询与 id、game、point to remove error 分组,这将返回所有记录。 对不起,我不明白。这里有什么问题:sqlfiddle.com/#!2/8b9c7/8/0 代码是:select id, game, min(point) from tablename group by id,game @Wawrzyniec - 问题是您的结果不正确。 ID 1, game z, min(point) 4 应该是正确的。【参考方案2】:

这会起作用

select * from table 
where (id,point) IN (select id,min(point) from table group by id);

【讨论】:

你使用的是哪个 rdbms? 哦!我不了解 MySQL ...该查询是子查询中的多列检查,它将在 Oracle 中工作。 好的。感谢您的支持【参考方案3】:

用途:

SELECT tbl.*
FROM TableName tbl
  INNER JOIN
  (
    SELECT Id, MIN(Point) MinPoint
    FROM TableName
    GROUP BY Id
  ) tbl1
  ON tbl1.id = tbl.id
WHERE tbl1.MinPoint = tbl.Point

【讨论】:

在Microsoft access中写SQL时可以做单个内连接吗?? 不必要的完成 SELECT id , game , MIN(point) FROM tablename GROUP BY id,game @SouravSarkar,这将不起作用该示例将返回原始查询的每一行,因为它正在寻找每个 id 游戏的最低点。 (例如,id = 1 和 game = x 的最低分数是 5;id = 1 和 game = z 的最低分数是 4) 我同意。这是不必要的。使用 Window 函数是一种更简洁的方法,并且与架构无关,也可以减少对连接的需求。 如前所述,当有两行id相同,最小值如[id, game, point] [1, x, 4][1, y, 4] 【参考方案4】:

Ken Clark's answer 在我的情况下不起作用。它也可能不适用于您的。如果没有,试试这个:

SELECT * 
from table T

INNER JOIN
  (
  select id, MIN(point) MinPoint
  from table T
  group by AccountId
  ) NewT on T.id = NewT.id and T.point = NewT.MinPoint

ORDER BY game desc

【讨论】:

【参考方案5】:
SELECT * from room
INNER JOIN
  (
  select DISTINCT hotelNo, MIN(price) MinPrice
  from room
 Group by hotelNo
  ) NewT   
 on room.hotelNo = NewT.hotelNo and room.price = NewT.MinPrice;

【讨论】:

对这段代码如何回答问题的简短解释将大大改善这个答案【参考方案6】:

由于仅使用sql 标记,以下使用ANSI SQL 和window function:

select id, game, point
from (
  select id, game, point, 
         row_number() over (partition by game order by point) as rn
  from games
) t
where rn = 1;

【讨论】:

【参考方案7】:

这是做同样事情的另一种方式,它可以让你做一些有趣的事情,比如选择前 5 名获胜的游戏等。

 SELECT *
 FROM
 (
     SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Point) as RowNum, *
     FROM Table
 ) X 
 WHERE RowNum = 1

您现在可以正确获取被识别为得分最低的实际行,并且您可以修改排序函数以使用多个标准,例如“显示得分最低的最早游戏”等。

【讨论】:

【参考方案8】:

此替代方法使用 SQL Server 的 OUTER APPLY 子句。这样,它

    创建不同的游戏列表,并 获取并输出该游戏得分最低的记录。

OUTER APPLY 子句可以想象成LEFT JOIN,但优点是您可以将主查询的值用作子查询中的参数(此处为游戏)。 p>

SELECT colMinPointID
FROM (
  SELECT game
  FROM table
  GROUP BY game
) As rstOuter
OUTER APPLY (
  SELECT TOP 1 id As colMinPointID
  FROM table As rstInner
  WHERE rstInner.game = rstOuter.game
  ORDER BY points
) AS rstMinPoints

【讨论】:

【参考方案9】:
SELECT DISTINCT 
FIRST_VALUE(ID) OVER (Partition by Game ORDER BY Point) AS ID,
Game,
FIRST_VALUE(Point) OVER (Partition by Game ORDER BY Point) AS Point
FROM #T

【讨论】:

什么是#T?你还没有定义,所以你的答案不完整。【参考方案10】:

这是可移植的——至少在 ORACLE 和 PostgreSQL 之间:

select t.* from table t 
where not exists(select 1 from table ti where ti.attr > t.attr);

【讨论】:

这应该如何回答这个问题? 查询选择同一张表中没有其他记录且属性值较大的记录。如果多行具有相同的最小属性值,则全部返回。``` select t.* from table t where not exists(select 1 from table ti where ti.attr > t.attr); ``` 即使您的答案是正确的,通过使用随机的表名和列名,您也很难看到您的答案和问题之间的关系。

以上是关于sql查询时间最小值的列的主要内容,如果未能解决你的问题,请参考以下文章

用于连接 Oracle 中多行的列值的 SQL 查询

SQL:将查询输出更改为具有两个单独的列,而不是具有 2 个值的行

SQL查询以选择具有最小值的不同行

sql求某一字段中最大值和最小值的问题,高手请进!

如何将 SQL 查询结果行作为具有不同标题名称的列? [关闭]

SQL Server 查询元素值的 xml 属性