我有一个查询,该查询返回一组包含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