我有一个excel,我用select读取dbf文件。我想从每个code_id中选择最后的日期时间。vba excel datetime innerjoin
Code_id daytime
1 12-01-2016 9:58:12
1 12-01-2016 10:01:12
2 12-01-2016 10:54:01
2 12-01-2016 11:01:01
一个结果我得到:
1 12-01-2016 9:58:12
2 12-01-2016 11:01:01
我想结果是:
1 12-01-2016 10:01:12
2 12-01-2016 11:01:01
似乎有一个问题,当时间从09到10,因为如果时间从去10到11或11到12我得到最后一次,但是当时间从9到10时,它获得最后一次9而不是时间10
是我的代码有问题吗?
SELECT b.code_id, COUNT(*) AS cnt, b.name,
b.type, a.tp
FROM " & Filename & " b
INNER JOIN (select code_id, MAX(daytime) AS tp
FROM " & Filename & " group by code_id) a
ON a.code_id = b.code_id
where DateValue(daytime) <= Date()
group by b.code_id, b.name,
b.type, a.tp
order by b.code_id
在我看来,日期时间不被认为是这样,而是作为一个简单的文本。并且在一个文本内比较9是在1之后。那是9:58:12(作为文本比较)在10:01:12之后。您需要将其转换为日期时间或在9之前添加0。 – Ralph
如何转换字段? – dave
您必须要求Excel进行转换。正如你所说,dbf只能按原样读取。所以,你首先必须(1)导入整个数据,然后(2)重新格式化它,以便识别日期和时间,然后你可以(3)按照上面的语句中所示将它分组到你喜欢的位置。要将文本转换为日期和时间,可以使用'CDate()',如下例所示:http://stackoverflow.com/questions/20375233/excel-vba-convert-text-to-date – Ralph