我有一个查询,返回一组包含campaignIds,PublisherIds,creationDate等的行。我想删除所有具有相同campaignId和PublisherId的行,并检索第一个creationDate(简化示例)。
执行groupBy将只显示campaignIds和publisherIds,或者如果我包含creationDate,它将不会过滤掉任何内容,因为creationDates都不同,
我能用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 });
但这并没有给我创造我需要的日期 Atm我认为唯一的方法似乎是将它排序为一个列表,并将每个项目与所有其他项目进行比较,以查看它是否重复 任何帮助表示赞赏
答案 0 :(得分:0)
我认为您的问题是您的外部选择语句缺少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