[英]Subtract values from first and last row per employee in SQL Server 2000
这是SQL Server 2000所以我没有任何窗口函数(row_number)。
我有一个表emp_data
:
emp_id datime miles gallons
23148 2011-08-21 02:00 32 3
23148 2011-08-21 09:00 38 4
23148 2011-08-21 11:00 40 5
42938 2011-08-20 03:00 23 1
42938 2011-08-22 08:00 53 13
我需要获得员工驾驶的里程数,我通过减去最早日期的里程减去最近日期的里程数来实现。 (40-32 = 8英里驱动empid=23148
)。 我也需要为加仑做这件事。
我需要为每个司机计算每加仑英里数。
最终结果应该是这样的:
emp_id miles gallons
23148 8 2
42938 30 12
为多个驱动程序执行此操作是我遇到的问题。 在SQL Server 2005中,我可能会执行row_number partition_by,但不知道在SQL Server 2000中要做什么。我已经为一个驱动程序做了类似的事情。 不会被驱动程序分区工作。 不得不使用identity()代替row_number。
SELECT IDENTITY(int) as id, emp_id, datime, miles, gallons
into #t1
FROM emp_data
where
emp_id='18018'
and datime >= '20110820 02:00'
and datime <= '20110827 02:00'
ORDER BY datime
select foo1.emp_id,foo2.miles - foo1.miles as miles_driven,
foo2.gallons - foo2.gallons as gallons_used
from (
SELECT *
FROM #t1
where id = 1) foo1
CROSS JOIN (
SELECT *
from #t1
where id = (select max(id) from #t1 t)
) foo2
我确实从SQL Server 2008有一个到SQL Server 2000数据库的链接服务器,所以我正在考虑获取数据然后在那里进行处理,但是仅仅一周就有大约100万条记录。 我可能需要为YTD做这件事。
如果有什么不清楚,请告诉我。 对不起,我没有任何样本数据。
这应该做到这一点。
SELECT
emp_id,
MAX(miles) - MIN(miles) AS miles_driven,
MAX(gallons) - MIN(gallons) AS gallons_used
FROM emp_data
GROUP BY emp_id
希望这可以帮助。
我认为这是你正在寻找的(不需要临时表),但只有在你有其他我们没有看到的数据约束时才使用。 否则请选择smdrager
SELECT minmaxdate.emp_id,
LAST.miles - FIRST.miles,
LAST.gallons - FIRST.gallons
FROM (SELECT emp_id,
MIN(datime) firstdate,
MAX(datime) lastdate
FROM emp_data
GROUP BY emp_id) minmaxdate
INNER JOIN emp_data FIRST
ON FIRST.emp_id = minmaxdate.emp_id
AND FIRST.datime = minmaxdate.firstdate
INNER JOIN emp_data LAST
ON FIRST.emp_id = minmaxdate.emp_id
AND LAST.datime = minmaxdate.lastdate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.