我有以下select语句:
SELECT DISTINCT a.month,
a.date
FROM a
ORDER BY a.bar DESC NULLS LAST;
月是char,date是日期。我需要使用日期列,因为这是我订购结果的东西。我得到了这个结果:
foo | bar
x---|---20-nov-15 00:00:00
y---|---31-oct-15 00:00:00
y---|---30-oct-15 00:00:00
z---|---28-sept-15 00:00:00
我需要一个WHERE
语句,从结果中消除重复的Y,我一直在寻找无法找到解决方案
答案 0 :(得分:0)
您似乎想要GROUP BY
:
SELECT a.month, MAX(a.date)
FROM a
GROUP BY a.month;
答案 1 :(得分:0)
我的方式:(您不需要使用SELECT DISTINCT...
SELECT * FROM
(SELECT *
,ROW_NUMBER() OVER(PARTITION BY FOO
ORDER BY BAR DESC) AS RN
FROM @RESULT) x
WHERE RN = 1
您可以使用行号和分区将数据分隔为Foo
,然后按降序Bar
排序。 (您可以根据需要添加更多分区)
然后使用第1行来获取每个Foo
全力以赴:
DECLARE @RESULT TABLE
([Foo] CHAR(1) ,[Bar] DATETIME)
INSERT INTO @RESULT
SELECT 'x', '2015-11-20T00:00:00'
INSERT INTO @RESULT
SELECT 'y', '2015-10-31T00:00:00'
INSERT INTO @RESULT
SELECT 'y', '2015-10-30T00:00:00'
INSERT INTO @RESULT
SELECT 'z', '2015-09-28T00:00:00'
SELECT * FROM
(SELECT *
,ROW_NUMBER() OVER(PARTITION BY FOO
ORDER BY BAR DESC) AS RN
FROM @RESULT) x
WHERE RN = 1
答案 2 :(得分:-1)
使用分组来解决此问题
SELECT a.month, a.date
FROM a
GROUP BY a.month
ORDER BY a.bar DESC NULLS LAST;