在使用SQL的Microsoft Access中使用DateSerial函数时,如何在组中选择最旧的日期值?

我需要从具有相同userID的一组记录中选择最早的日期。但是,我使用的日期字段是这样组织的字符串格式:yyyymmdd。 因此,我使用DateSerial函数将日期转换为以下格式:mm / dd / yyyy。那是第一步。第二步(这是我需要帮助的地方)是按最早的日期对UserID进行分组。任何帮助将不胜感激。

Current query:

SELECT 
    [userID],[company],DateSerial(Left([DateOfSale],4),Mid([DateOfSale],5,2),Right([DateOfSale],2)) AS SaleDate
FROM mytable

结果:

|userID| company  | SaleDate    |
_________________________________
|1     | catworld | 01/01/2005  |
|1     | catworld | 01/03/2017  |
|2     | fishworld| 05/05/2019  |
|3     | dogworld | 02/01/2005  |
|3     | dogworld | 02/03/2017  |

所需结果:

|userID| company  | SaleDate    |
_________________________________
|1     | catworld | 01/01/2005  |
|2     | fishworld| 05/05/2019  |
|3     | dogworld | 02/01/2005  |
hb51688 回答:在使用SQL的Microsoft Access中使用DateSerial函数时,如何在组中选择最旧的日期值?

请考虑使用CDate,它可以将日期字符串转换为实际的日期/时间值。但是,由于yyymmdd不是有效的日期格式,因此请在日期部分之间添加连字符以进行正确的转换。并在表级别添加一个新列。请参阅要单独运行或使用Access GUI运行的DDL命令(表设计>新字段):

ALTER TABLE main_table ADD COLUMN Saledate_Actual Date;

UPDATE main_table SET SaleDate_Actual = CDate(
                                              LEFT([DateOfSale],4) & '-' &
                                              MID([DateOfSale],5,2) & '-' &
                                              RIGHT([DateOfSale],2)
                                             );

然后将聚合查询连接到主表。

SELECT m.*
FROM main_table m
INNER JOIN
   (SELECT userID,MIN(Saledate_Actual) AS min_date
    FROM main_table
    GROUP BY userID) AS agg
ON m.userID = agg.userID
AND m.Saledate_Actual = agg.min_date

也许一天一次,MS Access将具有窗口功能。请将我的请求投票给MS Access team(无需登录以投票)!

SELECT m.*
FROM main_table m
WHERE m.Saledate_Actual = MIN(Saledate_Actual) OVER(PARTITION BY userID)
,

您可以使用相关子查询进行过滤。当前字符串日期(yyyymmdd)格式的好处是可以正确排序,因此应该可以:

select
    [userID],[company],DateSerial(Left([DateOfSale],4),Mid([DateOfSale],2),Right([DateOfSale],2)) AS SaleDate
from mytable t
where t.SaleDate = (
    select min(t1.[SaleDate]) from mytable t1 where t1.[userID] = t.[userID]
)
本文链接:https://www.f2er.com/2910256.html

大家都在问