SQL выбирает несколько значений максимального числа строк после группировки по - PullRequest
0 голосов
/ 19 июня 2019

У меня есть таблица, где каждый JunctionlistID повторяется много раз. перед каждым идентификатором в каждой строке есть JunctionlistID. Я хочу выбрать всю строку для каждого JunctionlistID, где идентификатор является последним. В этой таблице всего 5 столбцов, и я хочу, чтобы все столбцы были выделены при выборе этой строки.

    ID | MonitoringString| JunctionListId | area_id| CompanyProfileId
    1  | 1006410001D0    | 267            | 910064 | 7
    2  | 1206420001D0    | 268            | 910065 | 7
    3  | 1306440001D0    | 267            | 910064 | 7
    4  | 1506450001D0    | 268            | 910065 | 7
    5  | 1606470001D0    | 267            | 910064 | 7
    6  | 1806480001D0    | 268            | 910065 | 7
    7  | 1006420001D0    | 267            | 910064 | 7
    8  | 1006470001D0    | 268            | 910065 | 7
    9  | 1006490001D0    | 267            | 910064 | 7
   10  | 1006430001D0    | 268            | 910065 | 7
   11  | 1006460001D0    | 285            | 910066 | 8
   12  | 1006438001D0    | 268            | 910067 | 8

Ответ должен быть

    ID | MonitoringString| JunctionListId | area_id| CompanyProfileId       
    9  | 1006490001D0    | 267            | 910064 | 7
   10  | 1006430001D0    | 268            | 910065 | 7

Я пытаюсь выполнить запрос, как показано ниже -

    Select ID,MonitoringString,JunctionListId,area_id,CompanyProfileId from tblMonitoring where CompanyProfileId=7

Мне нужен такой же запрос и в linq, и в SQL. Если кто-нибудь знает, дайте мне правильное решение.

Спасибо

Ответы [ 5 ]

0 голосов
/ 19 июня 2019

Для linq вы можете сделать следующее. (Похоже, вы также хотите фильтровать по companyprofileid)

var result = items.Where(x=>x.CompanyProfileId==7)
.GroupBy(x=>x.JunctionListId)
.Select(x=>x.ToList()
            .OrderByDescending(c=>c.ID)
            .ThenBy(c=>c.JunctionListId)
            .First());
0 голосов
/ 19 июня 2019

Попробуйте это,

ВЫБЕРИТЕ COUNT (ID), MonitoringString, JunctionListId, are_id, CompanyProfileId FROM tblMonitoring WHERE CompanyProfileID = '7' GROUP BY CompanyProfileId;

0 голосов
/ 19 июня 2019

Выберите MAX (ID) ID, Max (MonitoringString) MonitoringString, Макс (JunctionListID) JunctionListID, Макс (area_id) area_id, Макс (CompanyProfileId) CompanyProfileId из MonitorsList , где CompanyProfileId = 7 Группировка по JunctionListID

0 голосов
/ 19 июня 2019

https://dotnetfiddle.net/oiRkzO

using System;
using System.Data.Entity;
using System.Linq;
using System.Collections.Generic;


public class Program
{
    public static void Main()
    {

            List<Item> items = new List<Item>()
            {
                new Item() { ID = 1, MonitoringString = "1006410001D0", JunctionListId = 267, area_id = 910064 , CompanyProfileId = 7},
                new Item() { ID = 2, MonitoringString = "1206420001D0", JunctionListId = 268, area_id = 910065 , CompanyProfileId = 7},
                new Item() { ID = 3, MonitoringString = "1306440001D0", JunctionListId = 267, area_id = 910064 , CompanyProfileId = 7},
                new Item() { ID = 4, MonitoringString = "1506450001D0", JunctionListId = 268, area_id = 910065 , CompanyProfileId = 7},
                new Item() { ID = 5, MonitoringString = "1606470001D0", JunctionListId = 267, area_id = 910064 , CompanyProfileId = 7},
                new Item() { ID = 6, MonitoringString = "1806480001D0", JunctionListId = 268, area_id = 910065 , CompanyProfileId = 7},
                new Item() { ID = 7, MonitoringString = "1006420001D0", JunctionListId = 267, area_id = 910064 , CompanyProfileId = 7},
                new Item() { ID = 8, MonitoringString = "1006470001D0", JunctionListId = 268, area_id = 910065 , CompanyProfileId = 7},
                new Item() { ID = 9, MonitoringString = "1006490001D0", JunctionListId = 267, area_id = 910064 , CompanyProfileId = 7},
                new Item() { ID = 10, MonitoringString = "1006430001D0", JunctionListId = 268, area_id = 910065 , CompanyProfileId = 7},
                new Item() { ID = 11, MonitoringString = "1006460001D0", JunctionListId = 285, area_id = 910066 , CompanyProfileId = 8},
                new Item() { ID = 12, MonitoringString = "1006438001D0", JunctionListId = 268, area_id = 910067 , CompanyProfileId = 8},

            };

        var result = items.GroupBy(item => item.JunctionListId).Select(g => g.FirstOrDefault(gx => gx.ID == g.Max(x => x.ID))).ToList();
        var resultCmp7 = items.Where(item => item.CompanyProfileId == 7).GroupBy(item => item.JunctionListId).Select(g => g.FirstOrDefault(gx => gx.ID == g.Max(x => x.ID))).ToList();

        foreach (var item in result)
        {
            Console.WriteLine(string.Format("{0},{1},{2},{3}",item.ID, item.MonitoringString, item.JunctionListId,item.area_id, item.CompanyProfileId));
        }

        Console.WriteLine();   

        foreach (var item in resultCmp7)
        {
            Console.WriteLine(string.Format("{0},{1},{2},{3}",item.ID, item.MonitoringString, item.JunctionListId,item.area_id, item.CompanyProfileId));
        }

        Console.ReadLine();
    }

    class Item
    {
        public int ID { get; set; }
        public string MonitoringString { get; set; }
        public int JunctionListId { get; set; }
        public int area_id { get; set; }
        public int CompanyProfileId { get; set; }
    }
}
0 голосов
/ 19 июня 2019

Если я правильно понимаю, вам просто нужны последние записи для каждой компании и идентификатора соединения, основанные на id. Вы можете использовать row_number():

Select m.*
from (select m.*, 
             row_number() over (partition by CompanyProfileId, JunctionListId order by id desc) as seqnum
      from tblMonitoring m
     ) m
where CompanyProfileId = 7 and seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...