我有一个查询,该查询返回一组包含campaignIds,PublisherIds,creationDate等的行。我想删除所有具有相同CampaignID和PublisherId的行,并检索第一个creationDate(简化示例)。

进行groupBy只会向我显示campaignIds和PublisherIds,或者如果我包括creationDate,它也不会过滤掉任何东西,因为creationDate都不同,

我能用SQL提出的最好的是:

SELECT activityType, uniqueUserId, publisherId, campaignId, nodeID
FROM
    (
    SELECT activityType , count(Id) EventCount, uniqueUserId, campaignId, publisherId, nodeID , creationDate
    FROM Eventlog
    WHERE campaignId IN (1687,5872,1819) AND activityType = 'Load'
    GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID, creationDate
    ) AS sub

GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID


但这不会显示creationDate,因为它不包含在分组依据中

简而言之:我想删除所有具有camapignId和PublisherId以及其他条件相同组合的行。我想要lambda形式的。

我当前的lambda函数是:

var test = eventsTotal.GroupBy(x => new { x.CampaignId, x.PublisherId, x.NodeId, x.UniqueUserId });


但这并没有给我我需要的creationDate
Atm我在想,唯一的办法似乎是将其排序为列表,并将每个项目与所有其他项目进行比较,以查看其是否重复
任何帮助表示赞赏

最佳答案

我认为您的问题是您的外部select语句缺少creationDate。这意味着creationDate不会在从数据库发送到您的应用程序的结果集中。



SELECT activityType, uniqueUserId, publisherId, campaignId, nodeID, MIN(creationDate) --I added creationDate here.
FROM
    (
    SELECT activityType , count(Id) EventCount, uniqueUserId, campaignId, publisherId, nodeID , creationDate
    FROM Eventlog
    WHERE campaignId IN (1687,5872,1819) AND activityType = 'Load'
    GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID, creationDate
    ) AS sub

GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID

10-05 23:39