2016-02-19 23 views
0

我很新的SQL和#1,所以原諒我的文章的佈局。 目前,我有把以下工作流成可執行的SQL語句掙扎:SQL:移動複製到另一個表,其中條件

我有一個包含一個表中的下列:

  1. ID(不是唯一的)
  2. PARTYTYPE(1或2)
  3. DATE列
  4. 其他幾個,不相關的列

現在我需要找到那些具有相同ID和相同PARTYTYPE但不是最近的,即,具有在DATE列小於最近期的PARTYTYPE和ID的給定組合的日期觀測(行)。滿足此條件的行需要以存檔他們被轉移到與同桌方案的另一表。

是否有一個有效的,但簡單的方式在SQL做到這一點? 我一直在尋找了很長時間,但由於它涉及尋找具備一定條件的副本,並將其插入到表中,這是一個相當具體的問題。

這是我到目前爲止有:

INSERT INTO table_history 
select ID, PARTYTYPE, count(*) as count_ 
from table 
group by ID, PARTYTYPE, DATE 
having DATE = MAX(DATE) 

任何幫助,將不勝感激!

回答

0

你描述的SQL幾乎完全相同的方式符合相關子查詢:

INSERT INTO table_history(. . .) 
    select t.* 
    from table t 
    where date < (select max(date) 
        from table t2 
        where t2.id = t.id and t2.partytype = t.partytype 
       ); 
+0

謝謝戈登。但問題是,我在我的table_history(我想在您的文章是T2)還沒有包含數據,也不會影響該決定行是否是重複的。但是,靠在你的答案,我想我發現了一些可能的工作: INSERT INTO表 SELECT * fromtable爲P1 其中GOODTHROUGHDATE <(SELECT MAX(GOODTHROUGHDATE)的表,其中DOCUMENTID = p1.DOCUMENTID何DOCUMENTID = P1 .DOCUMENTID) – chizze

相關問題