我正在尝试运行一个会给出时间平均值的查询,但是当我这样做时......计算中会出现一些重复的记录。我该如何删除重复项?
离。
第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)???
答案 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)
我相信你正在寻找DISTINCT。
http://www.sql-tutorial.com/sql-distinct-sql-tutorial&& http://www.w3schools.com/SQL/sql_distinct.asp
答案 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]
祝你好运!