首页 > 解决方案 > 如何选择具有不同列值并共享同一列的行 [日期值]

问题描述

我正在尝试对行进行一些组合。我的桌子是这样的

┌──────────┬────────────────┬────────────────┐
│Machine_N│日期│动作│
├──────────┼────────────────┼────────────────┤
│ RS1│ 2018-02-08 │ 阅读 │
│ RS1│ 2018-02-08 │ 参考 │
│ RS1│ 2018-02-16 │ 阅读 │
│ RS2│ 2018-01-31 │ 阅读 │
│ RS2│ 2018-01-31 │ 参考 │
└──────────┴────────────────┴────────────────┘

如何仅选择日期相同的操作,以便结果集为:

┌──────────┬────────────────┬────────────────┐
│Machine_N│日期│动作│
├──────────┼────────────────┼────────────────┤
│ RS1│ 2018-02-08 │ 阅读 │
│ RS1│ 2018-02-08 │ 参考 │
│ RS2│ 2018-01-31 │ 阅读 │
│ RS2│ 2018-01-31 │ 参考 │
└──────────┴────────────────┴────────────────┘

我尝试了一个有计数子句,但没有运气。任何帮助,将不胜感激。

标签: sqlsql-servercountsql-order-byhaving-clause

解决方案


使用subquery

select * 
from table t
where date = (select top (1) [date] 
              from table 
              where machine_n = t.machine_n 
              group by date
              order by COUNT(1) desc
             );

但是不是大多数 DBMS 都有 TOP 子句,所以您可以使用LIMIT子句代替

select * 
from table t
where date = (select [date] 
              from table 
              where machine_n = t.machine_n 
              group by date
              order by COUNT(1) desc
              LIMIT 1
              );

推荐阅读