Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中选择按用户分组的当天的第一个条目_Sql_Ms Access_Select - Fatal编程技术网

如何在SQL中选择按用户分组的当天的第一个条目

如何在SQL中选择按用户分组的当天的第一个条目,sql,ms-access,select,Sql,Ms Access,Select,我环顾四周,无法完全掌握从MS Access 2000表中提取数据所需的SQL查询问题的全部答案 下面是表[Time Sub]的示例: **CLIENT_ID, DATE_ENTERED, CODE, MINUTES** 11111, 5/12/2008 3:50:52 PM, M, 38 11111, 5/12/2008 2:55:50 PM, M, 2 11714, 5/13/2008 1:15:32 PM, M, 28 11111, 5/13/2008 6:15:12 PM

我环顾四周,无法完全掌握从MS Access 2000表中提取数据所需的SQL查询问题的全部答案

下面是表[Time Sub]的示例:

**CLIENT_ID, DATE_ENTERED, CODE, MINUTES**  
11111, 5/12/2008 3:50:52 PM, M, 38  
11111, 5/12/2008 2:55:50 PM, M, 2  
11714, 5/13/2008 1:15:32 PM, M, 28  
11111, 5/13/2008 6:15:12 PM, W, 11  
11112, 5/12/2008 2:50:52 PM, M, 89  
11112, 5/12/2008 5:10:52 PM, M, 9  
91112, 5/14/2008 1:10:52 PM, L, 96
11112, 5/12/2008 5:11:52 PM, M, 12
我需要为每个客户选择每天的第一个条目,该条目不是代码L或W

我知道这可以在SQL语句中实现,但我就是不知道如何实现。我可以接近,但从来没有得到正确的输出

感谢您的帮助

谢谢,
Mike

我从未使用过MS Access,因此您可能需要更正SQL差异:

select * from [Time Sub] A 
where
  DATE_ENTERED = (
    select top 1 DATE_ENTERED
    from [Time Sub] B
    where
      Int(A.DATE_ENTERED) = Int(B.DATE_ENTERED)
      and A.CLIENT_ID = B.CLIENT_ID
    order by
      DATE_ENTERED        
    )
  and (CODE <> 'L')
  and (CODE <> 'W')
从[Time Sub]A中选择*
哪里
输入的日期=(
选择输入的前1个日期
从[Time Sub]B开始
哪里
Int(A.输入日期)=Int(B.输入日期)
A.CLIENT\u ID=B.CLIENT\u ID
订购人
输入日期
)
及(代号"L")
及(代号"W")

让我们来看看。我想这就是你想要的

SELECT
  [Time Sub].CLIENT_ID,
  [Time Sub].CODE,
  MinDate.TheDay
FROM
  [Time Sub] INNER JOIN
    (
    SELECT
      [Time Sub].CLIENT_ID,
      MIN([Time Sub].DATE_ENTERED) as MinimumDate,
      Format([Time Sub].DATE_ENTERED, "YYYY-MM-DD") AS TheDay
    FROM
      [Time Sub]
    GROUP BY
      [Time Sub].CLIENT_ID,
      Format([Time Sub].DATE_ENTERED, "YYYY-MM-DD")
    ) AS MinDate
  ON MinDate.MinimumDate = [Time Sub].DATE_ENTERED AND MinDate.CLIENT_ID = [Time Sub].CLIENT_ID
WHERE
  [Time Sub].CODE NOT IN ("L", "W")

我是在使用了其他人已经做过的事情之后才发现这一点的。以下是我的想法:

SELECT [Time sub].CLIENT_ID, 
       [Time sub].Code, 
       [Time sub].Minutes, 
       FirstDay.MinEntry

FROM [Time sub] 
     INNER JOIN [
        SELECT
         [Time sub].CLIENT_ID,
         MIN([Time sub].[Date_Entered]) AS MinEntry

        FROM
         [Time sub]

        WHERE
          [Time sub].Code NOT IN ("T", "L")

       GROUP BY
          [Time sub].CLIENT_ID,
          DateValue([Time sub].[Date_Entered])

 ].AS FirstDay 

 ON FirstDay.MinEntry = [Time sub].[Date_Entered]

 ORDER BY FirstDay.MinEntry, [Time sub].CLIENT_ID;

这是迄今为止最好的尝试,但每天为每个客户端提取多个条目。我不知道它为什么这样做,因为它应该每天获得第一个(分钟)条目。但是请记住,每个客户机每天都有多个条目,我只是尝试(每个客户机)提取第一个条目。
SELECT [Time sub].CLIENT_ID, 
       [Time sub].Code, 
       [Time sub].Minutes, 
       FirstDay.MinEntry

FROM [Time sub] 
     INNER JOIN [
        SELECT
         [Time sub].CLIENT_ID,
         MIN([Time sub].[Date_Entered]) AS MinEntry

        FROM
         [Time sub]

        WHERE
          [Time sub].Code NOT IN ("T", "L")

       GROUP BY
          [Time sub].CLIENT_ID,
          DateValue([Time sub].[Date_Entered])

 ].AS FirstDay 

 ON FirstDay.MinEntry = [Time sub].[Date_Entered]

 ORDER BY FirstDay.MinEntry, [Time sub].CLIENT_ID;