Crystal Reports - 根据字段删除重复的行

时间:2010-12-21 21:46:16

标签: crystal-reports

在Crystal Reports XI R2上苦苦挣扎

我尝试根据最早的时间戳,每个ID只捕获一行。

示例:

ID时间

1 7:00

1 9:00

2 11:00

2 11:30

会返回

ID时间

1 7:00

2 11:00

我试图压制重复项,但因为它正在查看多个不起作用的字段。我想知道我是否可以对ID进行分组,然后按时排序,删除后面的条目?

***我想我可能已经想到这一点,通过转到专家,选择详细信息,抑制,然后添加函数:{LOG.id} =下一个({LOG.id});。

在我标记为已回答之前,我很想听到有关此问题的任何其他意见。感谢

3 个答案:

答案 0 :(得分:1)

如果您有权访问用于返回数据的查询/存储过程,您可以在那里进行分组,ala:

SELECT ID, MIN(Time) as Time 
FROM Table GROUP BY ID  

答案 1 :(得分:1)

根据您的数据,如果您根据数据来源进行过滤,可能会获得更好的结果,但如果不知道您所报告的内容,则无法知道。

如果您要过滤报告中显示的内容,您可能只是在网络中拖拽大量数据,只是为了在报告中对其进行抄袭。为什么不在源头过滤?

在sql server中你可以做这样的前N函数(包括测试数据)

create table t3 (id int, supplierId int, description varchar(max), value decimal(5,2), created datetime default getdate())

insert into t3 values 
(1, 1, 'test', 180.0, '20101001'),
(1, 1, 'test', 181.0, '20101003'),
(1, 1, 'test', 182.0, '20101002'),
(1, 2, 'test', 183.0, '20101005'),
(1, 2, 'test', 184.0, '20101002'),
(1, 2, 'test', 185.0, '20101001')


;with cte as 
(select 
      t.id
    , t.supplierId
    , t.description
    , t.value
    , t.created
    , rank() over (partition by t.supplierId order by t.created desc) as Position
from t3 t)
select * from cte where Position = 1

答案 2 :(得分:0)

我能够按ID分组,然后按时间排序。我曾尝试在我的SQL查询中添加一个min,但它是一个查询的野兽(根据我的标准)。我在这里包含的部分是它的一小部分。感谢您的所有提示。