2016-06-29 4 views
0
SELECT CONVERT(DATE,CAST([Year] AS VARCHAR(4))+'-'+ 
        CAST([Month] AS VARCHAR(2))+'-'+ 
        CAST('1' AS VARCHAR(2))) Date 
FROM (SELECT YEAR(Date) as [Year], MONTH(Date) as [Month] FROM [dbo].[Data] 
GROUP BY YEAR(Date), MONTH(Date)) x 
        ORDER BY Date DESC 

単一のクエリでこれを行うより良い方法がありますか?グループ月と年を区別して月と年を区別し、1つの日付として結合するSQL

クエリは、テーブルから一意の月と年を返しますが、日付を結合して返します。

+0

あなたがあなたのテーブルおよび所望の結果 – Lamak

+0

のいくつかのサンプルデータをポストする必要があり、これは重複している、まだ正解SQLサーバ – scsimon

答えて

1
IF OBJECT_ID ('tempdb..#TempT') IS NOT NULL DROP TABLE #TempT 
CREATE TABLE #TempT(
    dt datetime) 

INSERT INTO #TempT (dt) VALUES 
('2016-10-11'), 
('2016-10-3'), 
('2016-9-13'), 
('2016-9-16') 

SELECT DISTINCT CAST(DATEADD(month, DATEDIFF(month, 0, dt), 0) as DATE) AS Dates 
from #TempT 
1

サンプル・データは、実際の質問のこれらの種類の必要ですが、この関数は、このコードは、あなたが入力したものは何でも日付とり、最初のようにそれを評価しDATEFROMPARTS

SELECT 
    DATEFROMPARTS([Year], [Month], 01) 
FROM 
(
    SELECT 
    YEAR(Date) as [Year], 
    MONTH(Date) as [Month] 
    FROM [dbo].[Data] 
    GROUP BY YEAR(Date), MONTH(Date) 
) x 
ORDER BY Date DESC 
0

あなたのための助けとなる可能性今月の。効果的なだけで月と年を見て:

SELECT 
    DATEADD(MM,DATEDIFF(MM,0, [Date]),0) AS [YearMonth] 
FROM [dbo].[Data] 
ORDER BY 
    DATEADD(MM,DATEDIFF(MM,0, [Date]),0) 
; 
+0

FYSAのバージョンにタグを付けてください。 – scsimon

関連する問題