Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос SQL. Отсечение строк по порядку.  [new]
Herdsman
Member

Откуда:
Сообщений: 241
Помогите, пожалуйста. Есть таблица:
+

row cow date
3 10002 2000-12-01 00:00:00.000
2 10002 2000-08-01 00:00:00.000
1 10002 1990-06-01 00:00:00.000
1 10004 1990-06-01 00:00:00.000
2 10005 2002-12-01 00:00:00.000
1 10005 1990-06-01 00:00:00.000
1 10006 1990-06-01 00:00:00.000
1 10011 1990-06-01 00:00:00.000
1 10014 1990-06-01 00:00:00.000
2 10016 1996-04-01 00:00:00.000
1 10016 1990-06-01 00:00:00.000
3 10019 2000-12-01 00:00:00.000
2 10019 2000-08-01 00:00:00.000
1 10019 1990-06-01 00:00:00.000
4 10022 2012-01-01 00:00:00.000
3 10022 2007-06-01 00:00:00.000
2 10022 2007-01-01 00:00:00.000
1 10022 1990-06-01 00:00:00.000
1 10026 1995-01-01 00:00:00.000
3 10034 2000-12-01 00:00:00.000
2 10034 2000-08-01 00:00:00.000
1 10034 1990-06-01 00:00:00.000
1 10050 1990-06-01 00:00:00.000
1 10060 1990-06-01 00:00:00.000
1 10068 1990-06-01 00:00:00.000
1 10071 1990-06-01 00:00:00.000
1 10084 1991-07-15 00:00:00.000
1 10087 1990-06-01 00:00:00.000
1 10107 1993-02-01 00:00:00.000
1 10125 1990-06-01 00:00:00.000
1 10135 1990-06-01 00:00:00.000
1 10137 1990-06-01 00:00:00.000
1 10139 1990-06-01 00:00:00.000
2 10141 1993-12-13 00:00:00.000
1 10141 1990-06-01 00:00:00.000
2 10148 2002-09-01 00:00:00.000
1 10148 1990-06-01 00:00:00.000
1 10153 1994-03-01 00:00:00.000
1 10157 1990-06-01 00:00:00.000
1 10173 1990-06-01 00:00:00.000
1 10174 1995-01-01 00:00:00.000
2 10181 2008-01-01 00:00:00.000
1 10181 1990-06-01 00:00:00.000
3 10183 2000-12-01 00:00:00.000
2 10183 2000-08-01 00:00:00.000
1 10183 1990-06-01 00:00:00.000
1 10191 1990-06-01 00:00:00.000
1 10197 1990-06-01 00:00:00.000
1 10201 1990-06-01 00:00:00.000
34 10246 2004-03-01 00:00:00.000
33 10246 2004-02-01 00:00:00.000
32 10246 2004-01-01 00:00:00.000
31 10246 2003-12-01 00:00:00.000
30 10246 2003-11-01 00:00:00.000
29 10246 2003-10-01 00:00:00.000
28 10246 2003-09-01 00:00:00.000
27 10246 2003-08-01 00:00:00.000
26 10246 2003-07-01 00:00:00.000
25 10246 2003-06-01 00:00:00.000
24 10246 2003-05-01 00:00:00.000
23 10246 2003-04-01 00:00:00.000
22 10246 2003-03-01 00:00:00.000
21 10246 2003-02-01 00:00:00.000
20 10246 2003-01-01 00:00:00.000
19 10246 2002-12-01 00:00:00.000
18 10246 2002-11-01 00:00:00.000
17 10246 2002-10-01 00:00:00.000
16 10246 2002-09-01 00:00:00.000
15 10246 2002-08-01 00:00:00.000
14 10246 2002-07-01 00:00:00.000
13 10246 2002-06-01 00:00:00.000
12 10246 2002-05-01 00:00:00.000
11 10246 2002-04-01 00:00:00.000
10 10246 2002-03-01 00:00:00.000
9 10246 2002-02-01 00:00:00.000
8 10246 2002-01-01 00:00:00.000
7 10246 2001-12-01 00:00:00.000
6 10246 2001-11-01 00:00:00.000
5 10246 2001-10-01 00:00:00.000
4 10246 2001-09-01 00:00:00.000
3 10246 2001-08-01 00:00:00.000
2 10246 2001-07-01 00:00:00.000
1 10246 1990-06-01 00:00:00.000
1 10251 1990-06-01 00:00:00.000
1 10254 1990-06-01 00:00:00.000
1 10257 1995-12-01 00:00:00.000
2 10272 1998-05-01 00:00:00.000
1 10272 1990-06-01 00:00:00.000
1 10273 1990-06-01 00:00:00.000
2 10276 2007-08-01 00:00:00.000
1 10276 1995-09-01 00:00:00.000
1 10285 1990-06-01 00:00:00.000
1 10289 1990-06-01 00:00:00.000
1 10295 1990-06-01 00:00:00.000
1 10302 1990-06-01 00:00:00.000
1 10305 1994-02-01 00:00:00.000
1 10315 1990-06-01 00:00:00.000
1 10320 1990-06-01 00:00:00.000
3 10322 2003-04-01 00:00:00.000
2 10322 2002-04-01 00:00:00.000
1 10322 1990-06-01 00:00:00.000


Нужно у каждой коровы удалить записи с датами меньше 2001-12-01, при этом оставить "последнюю" по счёту строку в которой дата меньше 2001-12-01 (счёт указан в "row").
Есть программа на C#, которая делает это.
      
private static void mehika_meiutarim_921(Repository<KoachAdamEntities> repositoryKA)
        {
            bool flag_00;
            bool flag_01;
            char stat;

            List<cows_921> cows = repositoryKA.FindAll<cows_921>();

            var id_group = cows.GroupBy(x => new {x.cow}).OrderBy(x => x.Key.cow);

            foreach (var id_g in id_group)
            {
                flag_00 = false;
                flag_01 = false;

                foreach (cows_921 cow in id_g.OrderByDescending(x => x.date))
                {
                   
                    stat = 'M';

                    flag_01 = flag_00;

                    if (flag_01)
                    {
                        repositoryKA.DeleteByAndSave<cows_921>(
                            x => x.cow == cow.cow && x.date == cow.date);
                        stat = 'D';
                    }

                    if (cow.date < "20011201" && stat != 'D')
                    {
                        flag_00 = true;
                    }
                }
            }
        }
4 фев 14, 11:42    [15514928]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Glory
Member

Откуда:
Сообщений: 104751
ПК у таблицы как всегда нет ?
4 фев 14, 11:48    [15514980]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Herdsman
Member

Откуда:
Сообщений: 241
Glory,
ПК это Primary Key? Конечно есть. это cow + date
4 фев 14, 11:55    [15515048]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
cte +where [data] >2001-12-01+n = row_numer () over(partiton by cow oerder by [date] desc) +delete from cte where n <> 1 
4 фев 14, 12:02    [15515103]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Herdsman
Member

Откуда:
Сообщений: 241
Maxx,
Спасибо.
4 фев 14, 12:06    [15515142]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Jaffar
Member

Откуда:
Сообщений: 633
отсортировать по row_number и удалить строки где row_number > 1
4 фев 14, 14:16    [15516503]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Herdsman
Member

Откуда:
Сообщений: 241
Jaffar,
Спасибо. Уже написал по подсказке Maxx. Работает.
4 фев 14, 14:47    [15516767]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Добрый Э - Эх
Guest
Herdsman,

изощренно ты сформулировал задачу. так-то баян несусветный...
5 фев 14, 05:24    [15520198]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SQL. Отсечение строк по порядку.  [new]
Herdsman
Member

Откуда:
Сообщений: 241
Добрый Э - Эх,
Сейчас, после написания, я вижу что это та же задача, а раньше не заметил бы. Ну что поделать, я иногда задаю глупые вопросы. :)
5 фев 14, 09:41    [15520529]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить