簡體   English   中英

需要一點幫助,SQL Server 2000,具有and max(date)

[英]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。 一位雇員經歷了他的職業生涯,不時提高了價格。 從一組價格清單中選擇價格。

  1. KlientMedarbejder是雇員表。
  2. TimeprisMedarbejderPrisgruppe是他的記錄升級到新價格的日期列表。
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM