Sql 为usercolumn中的每个字段选择distinct from usercolumn和日期的最小值

Sql 为usercolumn中的每个字段选择distinct from usercolumn和日期的最小值,sql,distinct,aggregate-functions,minimum,Sql,Distinct,Aggregate Functions,Minimum,我有一些类似的数据,但超过1500000条记录和700多个用户: usercolumn , datecolumn\ a1 , 1998/2/11\ a2 , 1998/3/11\ a1 , 1998/2/15\ a4 , 1998/4/14\ a3 , 1999/1/15\ a2 ,

我有一些类似的数据,但超过1500000条记录和700多个用户:

usercolumn   ,       datecolumn\     
a1            ,      1998/2/11\
a2            ,      1998/3/11\
a1            ,      1998/2/15\
a4            ,      1998/4/14\
a3            ,      1999/1/15\
a2            ,      1998/11/12\
a2            ,      1999/2/11\
a3            ,      2000/2/9\
a1            ,      1998/6/5\
a3            ,      1998/7/7\
a1            ,      1998/3/11\
a5            ,      1998/3/18\
a2            ,      1998/2/8\
a1            ,      1998/12/11\
a4            ,      1998/12/1\
a5            ,      1998/2/11\
....
我希望有来自usercolumn的不同数据和每个用户的日期最小值,如下所示:

usercolumn      ,    datecolumn \        
a1              ,    1998/2/11\
a2              ,    1998/2/8\
a3              ,    1998/7/7\
a4              ,    1998/4/14\
a5              ,    1998/2/11\
....

请帮助我为c中的oledb适配器编写一个SQL命令,谢谢。

类似的东西应该可以完成这项工作

    SELECT usercolumn
         , MIN(datecolumn)
      FROM YouTable
     GROUP BY usercolumn
         , MIN(datecolumn)

如果您不止拥有这两列,那么最好的SQL使用方法多少取决于您在OleDB适配器的另一端拥有的服务器,但这里有一些方法可以很好地处理很多问题,而不是所有问题!这些可能的服务器:

SELECT t.*
FROM thetable t
LEFT JOIN thetable taux
  ON(t.usercolumn=taux.usercolumn
     AND t.datecolumn>taux.datecolumn)
WHERE taux.usecolumn IS NULL

您可以将其读取为发出表中的这些行,以便表中没有其他行具有相同的用户和严格意义上的更短的日期。如果给定用户的最小日期可以出现多次,这将为该用户提供尽可能多的行-如果这是您的问题,也有解决方案。。。但我会等你进一步澄清你的问题,然后再继续我的工作-

这将适用于SQLServer2008和DB2:

with temp as (
    select *, row_number() over (partition by usercolumn order by datecolumn) as rownum
    from table)
select * from temp 
where rownum = 1
即使您需要在select中包含多个列,它也会给出正确的结果

SELECT usercolumn, MIN(datecolumn) FROM tablename GROUP BY usercolumn;
请注意,如果需要其他列,则它们必须出现在GROUPBY子句中,或者跨行保持不变。否则结果将是不确定的。

您可以尝试以下方法:

SELECT DISTINCT a.username, a.date
FROM tablename AS a INNER JOIN tablename AS b
ON(a.username = b.username AND a.date < b.date)

至于C,在这方面帮不了你

选择不同的用户名,从TABLENAME中选择日期作为
其中A.DATE=SELECT MINDATE FROM TABLENAME其中USERNAME=A.USERNAME

SQL错误:至少在体面的SQL引擎中,GROUP BY子句中不允许使用聚合函数!-。只需删除最后一行,按mindatecolumn分组没有任何意义,没有它的答案也很好-@根据我的评论,dmitri的答案一经修正,对于您所陈述的问题来说是不错的,但我怀疑您误述了问题:特别是,如果您有其他专栏,您需要另一种方法。