2015-10-22 48 views
1

有沒有辦法讓我使用查詢或存儲過程來做到這一點?有沒有辦法根據數據行選擇行作爲標準?

示例表:

ID   TYPE TIMESTAMP  QTY 
P12345.1 A  2015-10-22  90 
P12345.2 A  2015-10-22  0 
P12001.1 A  2015-10-22  87 
P12345.3 A  2015-10-23  92 
P19000.1 B  2015-10-23  75 

我想只選擇行,只要它們具有在ID相同的前綴(字符之前週期()。),並且它們具有相同類型和相同的時間戳。

在上面的例子中,3行具有相同的前綴:P12345.1,P12345.2和P12345.3。但是,只有P12345.1和P12345.2具有相同的時間戳,因此我將選擇P12345.1的行而不是P12345.2。

這應該是結果表:

ID   TYPE TIMESTAMP  QTY 
P12345.1 A  2015-10-22  90 
P12001.1 A  2015-10-22  87 
P12345.3 A  2015-10-23  92 
P19000.1 B  2015-10-23  75 

我真的有一個很難解決這一點,我需要這個使用查詢或存儲過程來完成。先謝謝你。非常感謝你的幫助。

+0

所以你的意思是,如果同樣的Pnnnnn前綴和同一日期,挑最低後綴行? – jarlh

+1

您使用的是什麼RDBMS? – brenners1302

+0

@jarlh相同的前綴,相同的日期和相同的類型,是的。挑選最低後綴的行。 – Peter

回答

1
select ID, TYPE, TIMESTAMP, QTY 
from tablename t1 
where not exists (select 1 from tablename t2 
        where LEFT(t2.id, 6) = LEFT(t1.id, 6) 
        and t2.TIMESTAMP= t1.TIMESTAMP 
        and t2.id < t1.id) 
1

試試這個,

SELECT ID 
     ,TYPE 
     ,TIMESTAMP 
     ,QTY 
FROM PrefixTable t1 
WHERE NOT EXISTS (
      SELECT 1 
      FROM PrefixTable t2 
      WHERE SUBSTRING(t2.id ,1 ,6) = SUBSTRING(t1.id ,1 ,6) 
        AND t2.TIMESTAMP = t1.TIMESTAMP 
        AND t2.id < t1.id 
     ) 
0

試試這個:

select dt.* 
    from dataTable dt 
where right(dt.id,1) = (select min(right(dt2.id,1)) from dataTable dt2 
          where left(dt.id,6) = left(dt2.id,6) 
          and dt.timestamp = dt2.timestamp) 
相關問題