仅选择一个重复记录

时间:2018-12-15 08:03:39

标签: sql

我有一个三列的桌子。

  1. ID(唯一)
  2. 代码
  3. 时间(时间戳)

我想这样显示指定日期范围内的代码记录;

SELECT * FROM table 
       WHERE time >= '2018-12-13' AND time <= '2018-12-16 23:59:59.999' ORDER BY ID

工作。我对此查询没有任何问题。 但是对于每个重复的代码记录,我只需要一行的结果。

如何通过上述查询执行此操作?

4 个答案:

答案 0 :(得分:0)

使用相关子查询

select t1.* from table t1
where time = select min(time) from table t2
              where t2.code=t1.code
           and time >= '2018-12-13' AND time <= '2018-12-16 23:59:59.999'

答案 1 :(得分:0)

如果您希望将整行作为唯一行并消除其余重复行,请向您的选择查询中添加public static void ShowTitle(string Title) { int SpacesBefore = ((Console.BufferWidth - 1) - Title.Length) / 2; Console.WriteLine("{0}{1}\n{0}{2}\n", new string(' ', SpacesBefore), Title, new string('=', Title.Length)); } ,否则DISTINCT可以通过将一个条目作为一个组,并对另一个组执行聚合,以将组部分和其他列都保存在接收器中

group by

     SELECT DISTINCT * from table 
     WHERE time >= '2018-12-13' 
       AND time <= '2018-12-16 23:59:59.999' 
     ORDER BY ID

答案 2 :(得分:0)

一种合适的方法是:

SELECT t.*
FROM table t
WHERE t.id = (SELECT t2.id
              FROM table t t2
              WHERE t2.code = t.code AND
                    t2.time >= '2018-12-13' AND
                    t2.time < '2018-12-17'
              ORDER BY t2.id
              LIMIT 1
             )
ORDER BY ID;

除了在语法上正确的SQL(除LIMIT之外,它几乎可以在任何数据库中运行)之外,它还可以利用(code, time, id)上的索引。它应该比使用GROUP BY的替代方法更快。

答案 3 :(得分:-4)

您可以使用group bydistinct子句。

SELECT ID, code, time 
FROM table 
WHERE time >= '2018-12-13' 
  AND time <= '2018-12-16 23:59:59.999' 
GROUP BY code 
ORDER BY ID