我无法获得select distinct
语句的正确语法。
我无法找出正确的代码来从这个链接获得我需要的东西。
这是我现在的代码,但是当我希望将SELECT DISTINCT
仅应用于column1
时,它显然会选择多个日期。
SELECT DISTINCT
column1, column2, column3, column4, column5
FROM Table1
WHERE
column1 >= '2016/1/1'
And column1 < '2016/1/4'
AND column2 = 1
AND column3 = 1
ORDER BY column2, column1;
这是我在Fiddle中放在一起的内容,但同样会在column1
中选择多个相同的日期。老实说,我甚至不知道从这些链接构建此声明的位置。
抱歉,我从Fiddle链接到SQL Sever 2008,我正在使用2014。
编辑:添加更多信息, 这是我现在得到的结果:
January, 01 2016 00:00:00 1 1 1 4
January, 01 2016 00:00:00 1 1 5 4
January, 01 2016 00:00:00 1 1 9 4
January, 02 2016 00:00:00 1 1 2 4
January, 02 2016 00:00:00 1 1 6 4
January, 03 2016 00:00:00 1 1 3 4
January, 03 2016 00:00:00 1 1 7 4
这是我要找的结果:
January, 01 2016 00:00:00 1 1 1 4
January, 02 2016 00:00:00 1 1 2 4
January, 03 2016 00:00:00 1 1 7 4
答案 0 :(得分:2)
这是一个经典的top-n-per-group
问题。
一种可能的选择是使用ROW_NUMBER
。您需要通过在column1
子句中指定ORDER BY
来确定应为OVER
的每个唯一值选择哪一行。
WITH
CTE
AS
(
SELECT
column1, column2, column3, column4, column5
,ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY ...) AS rn
FROM Table1
WHERE
column1 >= '2016/1/1'
And column1 < '2016/1/4'
AND column2 = 1
AND column3 = 1
)
SELECT
column1, column2, column3, column4, column5
FROM CTE
WHERE rn = 1
ORDER BY column2, column1;
有关几种方法的详细比较,请参阅Retrieving n rows per group。