繁体   English   中英

从SQL Server 2000中每个员工的第一行和最后一行中减去值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM