DoS*_*ffZ 0 sql sql-server sql-server-2000 max having
我需要一点帮助让这个脚本做我想要的.
SELECT KM.initials,
TPL.debprice,
TMP.pricegroup,
TMP.date
FROM klientmedarbejder KM
INNER JOIN timeprismedarbejderprisgruppe TMP
ON KM.employeeno = TMP.employeeno
INNER JOIN timeprisprisgruppelinie TPL
ON TMP.pricegroup = TPL.pricegroup
GROUP BY KM.initials,
TMP.date,
TPL.debprice,
TMP.pricegroup,
TPL.date
HAVING ( Max(TMP.dato) = TPL.date )
Run Code Online (Sandbox Code Playgroud)
我需要的是具有最新(最大)日期的debPrice.一名员工经历了他的职业生涯,偶尔他的价格会升级.价格从一组价格中选择.
KlientMedarbejder 是员工表. TimeprisMedarbejderPrisgruppe 是他的记录升级到新价格的日期列表. TimeprisPrisgruppeLinie 是您可以拥有的价格列表. 我的解决方案是每位员工最多2个选项.因此:
emp A - 300 - 9 - 1900-01-01
emp A - 500 - 4 - 2012-01-01
emp B - 400 - 6 - 1900-01-01
emp B - 800 - 8 - 2012-04-01
Run Code Online (Sandbox Code Playgroud)
因此,第一条记录是他加入公司时的默认记录.2012年,他终于有了足够好的价格.现在,我需要在每个员工的升级列表上找到最新日期的答案.因此,emp A应该给我500,而emp B应该给我800.现在并非所有员工都可以更新01-01或04-01.一些员工随着时间的推移已经进行了多达8次升级,我只关心最新的.
客户端我正在从运行SQL Server 2000中提取此数据.
SQL Server 2000的典型解决方案是隔离employeeseno及其最大日期(这在2005年更容易).伪代码:
SELECT d.columns, etc. FROM
(
SELECT employeeno, [date] = MAX([date])
FROM dbo.tablewithdates
GROUP BY employeeno
) AS grouped_emp
INNER JOIN dbo.tablewithdates AS d
ON d.employeeno = grouped_emp.employeeno
AND d.[date] = grouped_emp.[date]
INNER JOIN ...
Run Code Online (Sandbox Code Playgroud)
危险在于,如果employeeno + date不是唯一的,那么你可以得到多行,所以你需要确定如何处理关系.
我会为你的架构编写它但我不能对你的查询进行反向工程以找出哪个表是哪个.开始简单并开始工作.