我有一个三列的桌子。
我想这样显示指定日期范围内的代码记录;
SELECT * FROM table
WHERE time >= '2018-12-13' AND time <= '2018-12-16 23:59:59.999' ORDER BY ID
工作。我对此查询没有任何问题。 但是对于每个重复的代码记录,我只需要一行的结果。
如何通过上述查询执行此操作?
答案 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 by
或distinct
子句。
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