对于这个问题,我使用 Access 作为 SQL Server 的前端,并通过 Excel VBA 调用 Access,但如果有一些 T-SQL 特定功能在这里会更有用,我可以使用直接 ADO 连接。
我有一个记录一组项目状态更改的表,例如:
+-------+-------+------------+
| docID | state | date |
+-------+-------+------------+
| 103 | 5 | 10/15/2013 |
| 103 | 6 | 10/18/2013 |
| 102 | 3 | 10/22/2013 |
| 103 | 2 | 11/1/2013 |
| 102 | 7 | 11/8/2013 |
+-------+-------+------------+
对于每个 unique docID
,我想弄清楚它的状态是否仅从第一个日期到最后一个日期增加,或者它是否会减少。在上述数据集中,103 减少,102 只增加。我们可以假设条目将按日期顺序排列。
找到它的一种方法是为每个对象创建一个对象docID
并将这些对象添加到字典中,将每个状态更改加载到列表中并检查状态是否已减少,如下所示:
function isDecreasing(cl as changeList) as boolean
for c=2 to cl.count
if cl.item(c).state < cl.item(c-1).state then
isDecreasing=true
exit function
end if
next
isDecreasing=false
end function
但这会大大降低我的查询速度,因为我必须将所有表数据转换为对象。这也意味着我必须编写大量额外的代码来创建和管理用于计算和生成报告的对象。
有什么方法可以在 SQL Server 或 Access 中编写可以对整个数据集执行相同类型分析的查询?