有没有办法根据数据行选择行作为标准?

时间:2015-10-22 07:19:40

标签: sql sql-server stored-procedures

我有办法使用查询或存储过程来执行此操作吗?

示例表:

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

我真的很难解决这个问题,我需要使用查询或存储过程来完成此任务。先感谢您。真的很感谢你的帮助。

3 个答案:

答案 0 :(得分: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 :(得分:1)

试试这个,

WebView

答案 2 :(得分: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)