[英]Need a little help, SQL Server 2000, having and max(date)
我需要一點幫助來使此腳本執行我想要的操作。
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 )
我需要的是最近(最大)日期的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
因此,無論他何時加入公司,第一筆記錄都是默認記錄。 在2012年,他終於以高價獲得了足夠的表現。 現在,我需要每個員工的升級列表上帶有最新日期的答案。 因此,emp A應該給我500,emp B應該給我800。現在,並不是所有的員工都可以進行01-01或04-01的價格更新。 隨着時間的推移,一些員工最多進行了8次升級,我只關心最新的情況。
我正在從中提取數據的客戶端正在運行SQL Server 2000。
SQL Server 2000的典型解決方案是隔離employeeno及其最大日期(在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 ...
危險是,如果employeeno + date不是唯一的,則可能會獲得多行,因此需要確定如何處理關系。
我會為您的模式編寫它,但是我無法對您的查詢進行反向工程以找出哪個表是哪個。 從簡單開始並進行工作。
HAVING子句在group by之后發生,因此它只能使用聚合列。
您需要在分組依據之前計算最大日期。 這需要添加一個用於計算的子查詢,然后添加WHERE子句以進行正確的過濾:
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 join
(select employeeno, MAX(dato) as maxdato
from timeprismedarbejderprisgruppe t
group by employeeno
) tmax
on tmax.employeeno = tmp.employeeno
where tmp.dato = tmax.maxdato
GROUP BY KM.initials, TMP.date, TPL.debprice, TMP.pricegroup, TPL.date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.