如何在SQL中选择按用户分组的当天的第一个条目
我环顾四周,无法完全掌握从MS Access 2000表中提取数据所需的SQL查询问题的全部答案 下面是表[Time Sub]的示例:如何在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
**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;