mysql - 如何获取每个值的 1 条记录

标签 mysql sql mariadb

我需要获取 ExpTime 大于 2017-05-24 的每个 TypV 的记录

示例数据:

PHVal TypV  WTemp   ExpTime
----------------------------------
 3.00   A   22.00   2017-03-29 02:34:00
 6.00   A   45.00   2017-06-29 02:34:00
 8.22   A   12.00   2017-08-25 01:25:00
 3.00   A   22.00   2017-03-29 02:34:00
11.00   B   11.00   2016-06-29 02:34:00
 1.22   C   12.00   2017-04-25 11:25:00
17.00   B    1.70   2017-05-30 02:44:00
27.22   C   76.00   2017-07-25 08:21:00
11.00   B   18.30   2017-09-29 14:34:00
27.22   C   32.00   2017-11-12 11:31:00

如果我运行 SQL 查询

SELECT 
 PHVal, TypV,   WTemp,  ExpTime
FROM tempsurvey
WHERE 
 ExpTime > to_date('2017-05-24')

我已经获得了每个 TypV 的多个记录,但我想要输出:

PHVal TypV  WTemp   ExpTime
----------------------------------
 6.00   A   45.00   2017-06-29 02:34:00
17.00   B    1.70   2017-05-30 02:44:00
27.22   C   76.00   2017-07-25 08:21:00

最佳答案

我希望您需要包含 ExpTime > '2017-05-24' 的行,并选择每个 TypV 具有最小日期的行。

查询

select t2.PHVal,
t2.TypV,
t2.WTemp,
t2.ExpTime
from
(
   select PHVal,
   TypV,
   WTemp,
   ExpTime,
   ( 
      case TypV 
      when @curA
      then @curR := @curR + 1 
      else @curR := 1 and @curA := TypV end
   ) + 1 as rn
  from (
      select * from `your_table_name` 
      where cast(ExpTime as date) > '2017-05-24'
 ) t,
 (select @curR := 0, @curA := '') r
 order by TypV, ExpTime
)t2
where t2.rn = 1
order by TypV;

<强> Find demo here

关于mysql - 如何获取每个值的 1 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44128567/

相关文章:

PHP/SQL - 搜索数据库时忽略 HTML 标签

php - 在 Codeigniter 中连接 3 个表没有结果

java - JPA - 选择、连接、子查询和最大值

mysql - 如果否则更新 sql 查询以组合多个查询

sql - 为什么在此查询中 LIMIT 2 比 LIMIT 1 长几个数量级?

ubuntu - mysqld 在运行简单查询时收到信号 6

java - 如何在Mac上保持ssh连接?

javascript - HTML 表单将数据 POST 到 MySQL

mysql - 选择产品并加入类别分层

MariaDB 启用页面压缩