用于从计算中删除重复项的SQL表达式

时间:2008-10-09 17:42:24

标签: sql

我正在尝试运行一个会给出时间平均值的查询,但是当我这样做时......计算中会出现一些重复的记录。我该如何删除重复项?

离。

第1 / 07-5794 / 07-5794 / 07-5766 / 07-8423 / 07-4259号

第2栏/ 00:59:59 / 00:48:22 / 00:42:48 / 00:51:47 / 00:52:12

我可以得到第2列的平均值,但我不希望第1列中的相同值计算两次(07-5794)???

5 个答案:

答案 0 :(得分:1)

要获得每个incnum的最小值的平均值,您可以编写此SQL

select avg(min_time) as avg_time from
    (select incnum, min(col2) as min_time from inc group by incnum)

为您的品牌SQL使用正确的平均功能。

如果您在Access中执行此操作,则需要将其粘贴到SQL视图中;当您使用子查询时,您无法在设计视图中直接执行此操作。

答案 1 :(得分:0)

SELECT DISTINCT()

GROUP BY()

SELECT UNIQUE()

...但通常平均值包含重复项。告诉我这不适用于财务软件,我不会代表another abuse of statistics

答案 2 :(得分:0)

答案 3 :(得分:0)

您想要删除所有重复的条目吗?也就是说,如果计算中不包含“07-5794”的行。如果是这种情况,我认为这会起作用(至少在Oracle中):

SELECT AVG(col2)
  FROM (
    SELECT col1, MAX(col2) AS col2
      FROM table
      GROUP BY col1
      HAVING COUNT(*) = 1
  )

但是,如果您想保留其中一个重复项,则需要指定如何选择要保留的副本。

答案 4 :(得分:0)

阿纳斯塔西,

假设您已经计算了平均值和表中的唯一键,您可以执行类似这样的操作,以获得每个唯一07-xxx结果的最新时序:

select Column1, Avg(Convert(decimal,Column2)) 
from Table1
where TableId in
(
select Max(TableId)
from Table1
group by Column1
)
group by column1

这是假设MS SQL中的以下表结构:

CREATE TABLE [dbo].[Table1] (
[TableId] [int] IDENTITY (1, 1) NOT NULL ,
[Column1] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Column2] [int] NULL ) ON [PRIMARY]

祝你好运!