2016-11-22 77 views
-3

请帮我查询 下面是桌子和要求的详细信息PostgreSQL的查询

enter image description here

+2

请澄清你是否想要MySQL或PostgreSQL的解决方案。您已经用两种产品标记了问题,但每种解决方案可能有所不同。你的问题标题说'postgresql查询',但为什么要标记MySQL的问题? –

+2

发布你的代码,而不是你的代码的图片。 – WillardSolutions

+0

https://stackoverflow.com/help/how-to-ask –

回答

1

您应该使用窗口功能

select alph_letter, alph_group, min(alph_date) OVER (PARTITION BY alph_group) AS min_date from alphabets; 
+0

感谢您的快速解决方案 –

1

你可以使用的min开窗变种:

SELECT letter, group, MIN(date) OVER (PARTITION BY group) 
FROM alphabets 
1

这是另一种方式:)。我使用SQL Server,但语法应该是这个问题类似:

示例数据:

IF OBJECT_ID('tempdb..#Alphabets') IS NOT NULL 
    DROP TABLE #Alphabets; 

CREATE TABLE #Alphabets(Letter VARCHAR(1) 
        , Groups VARCHAR(3) 
        , Dates DATE); 

INSERT INTO #Alphabets 
VALUES 
     ('A' 
    , 'abc' 
    , '20161026'), 
     ('B' 
    , 'abc' 
    , '20161027'), 
     ('C' 
    , 'abc' 
    , '20161028'), 
     ('D' 
    , 'def' 
    , '20161101'), 
     ('E' 
    , 'def' 
    , '20161030'); 

QUERY:

SELECT B.Letter 
    , B.Groups 
    , MinDates 
FROM 
     (SELECT MIN(Dates) AS MinDates 
      , Groups 
     FROM #Alphabets 
     GROUP BY Groups) AS A 
     INNER JOIN #Alphabets AS B ON A.Groups = B.Groups; 

结果:

enter image description here