8

我有一些这样的数据,但超过 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\
....

请帮我编写一个 SQL 命令来为 c# 中的 oledb 适配器执行此操作,谢谢。

4

6 回答 6

29
SELECT usercolumn, MIN(datecolumn) FROM tablename GROUP BY usercolumn;

请注意,如果您想要其他列,它们必须要么出现在 GROUP BY 子句中,要么跨行保持不变。否则结果将是不确定的。

于 2009-06-20T17:22:48.440 回答
2

这适用于 SQLServer 2008 和 DB2:

with temp as (
    select *, row_number() over (partition by usercolumn order by datecolumn) as rownum
    from table)
select * from temp 
where rownum = 1

即使您需要在选择中包含多个列,它也会给出正确的结果。

于 2009-06-20T17:18:30.927 回答
0

像这样的事情应该做的

    SELECT usercolumn
         , MIN(datecolumn)
      FROM YouTable
     GROUP BY usercolumn
         , MIN(datecolumn)
于 2009-06-20T16:39:19.247 回答
0

你可以试试这个:

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#,帮不了你

于 2009-06-20T18:00:59.733 回答
0

SELECT DISTINCT USERNAME, DATE FROM TABLENAME AS A.DATE=(SELECT MIN(DATE) FROM TABLENAME WHERE USERNAME=A.USERNAME)

于 2009-08-20T21:52:27.677 回答
0

如果您的列不止这两列,那么要使用的最佳 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

您可以将其读作“发出表格的那些行,以使表格中没有其他行具有相同的用户和严格的日期”。如果给定用户的最短日期可以多次出现,这将为该用户提供尽可能多的行 - 如果这对您来说是个问题,那么也有解决方案......但我会等你澄清你的问题在我对此进行更多工作之前!-)

于 2009-06-20T16:57:42.857 回答