如何删除仅仅第一列相同的记录?

问题描述:关系数据库中手工输入表InputData中有如下记录,

TagName TimeStamp Value
MM0008 2007-08-12 0:00:00 1000
MM0008 2007-08-13 0:00:00 1001
MM0008 2007-08-14 0:00:00 1002
MM0008 2007-08-15 0:00:00 1003
MM0008 2007-08-16 0:00:00 1004
MM0008 2007-08-17 0:00:00 1005
MM0008 2007-09-07 9:50:22 4444
MM0008 2007-09-07 15:10:56 100
MM0008 2007-09-07 15:11:56 200
MM0008 2007-09-11 15:53:13 500
MM0008 2007-09-11 15:54:51 500
MM0008 2007-09-11 15:55:03 123
MM0008 2007-09-11 15:58:08 500
MM0008 2007-09-11 16:01:58 0
MM0009 2007-09-11 15:58:08 501
MM0009 2007-09-11 16:01:58 0
MM0010 2007-09-11 15:58:08 502
MM0010 2007-09-11 16:01:58 0
MM0011 2007-09-11 15:58:08 503
MM0011 2007-09-11 16:01:58 0
MM0018 2007-09-11 15:58:08 504
MM0018 2007-09-11 16:01:58 0
MM0019 2007-09-11 15:58:08 505
MM0019 2007-09-11 16:01:58 0
MM0020 2007-09-11 15:58:08 506
MM0020 2007-09-11 16:01:58 0
MM0021 2007-09-11 15:58:08 507
MM0021 2007-09-11 16:01:58 0
MM0022 2007-09-11 15:58:08 508
MM0022 2007-09-11 16:01:58 0
MM0023 2007-09-11 15:58:08 509
MM0023 2007-09-11 16:01:58 0
MM0024 2007-09-11 15:58:08 510
MM0024 2007-09-11 16:01:58 0
MM0025 2007-09-11 15:58:08 511
MM0025 2007-09-11 16:01:58 0

如何获得每个TagName离当前时间最近的一条记录,把它的值及其时间插入到实时数据库中?最后得到的记录集如下所示:

TagName TimeStamp Value

MM0008 2007-09-11 16:01:58 0
MM0009 2007-09-11 16:01:58 0
MM0010 2007-09-11 16:01:58 0
MM0011 2007-09-11 16:01:58 0
MM0018 2007-09-11 16:01:58 0
MM0019 2007-09-11 16:01:58 0
MM0020 2007-09-11 16:01:58 0
MM0021 2007-09-11 16:01:58 0
MM0022 2007-09-11 16:01:58 0
MM0023 2007-09-11 16:01:58 0
MM0024 2007-09-11 16:01:58 0
MM0025 2007-09-11 16:01:58 0

解决方案:

1. 使用distinct:可以删除完全相同的记录,但是我现在只需要删除TagName列相同的记录,不是很好实现。

2. 使用group by

SELECT     Tagname, TimeStamp, Value
FROM         InputData
WHERE     (TimeStamp IN
                          (SELECT     MAX(TimeStamp) AS TimeStamp
                            FROM          InputData 
                            GROUP BY Tagname)) 

你可能感兴趣的:(删除)