|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
Здравствуйте. Необходима помощь в написании красивого запроса :) Допустим, у нас есть некая последовательность: Код: plaintext
которая представлена, например, в виде такой таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Этой последовательностью может быть и последовательность сущностей, не имеет значения. Из представленной коллекции нужно выбрать первую группу десяток. (Запрос должен импортироваться в Linq to Entity/NHibernate и представлять один единственный Select.) Заранее спасибо за участие! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 13:33 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
AlexMAS, этот вопрос наверно лучше было бы задать в ветку по БД и вопрос глупый, в реляционных БД не существует порядка следования записей ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 13:48 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
няка, Уважаемый, скорей ваш ответ глупый. Плиз, не засоряйте ветку. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 13:55 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
AlexMAS, тебе сказали что в субд нет порядка нумеруй последовательности (номер, или таймстамп или еще что) и не обзывай адекватов а то забаню нафиг!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 14:17 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
чисто теоретически , ТСу должны помочь оконные ф-ии, с которыми к сожалению в mssql не очень. посмотрите в форуме по Microsoft SQL Server, там были аналогичные вопросы по последовательностям (CTE, lead/lag) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 14:26 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
ViPRos, >> тебе сказали что в субд нет порядка >> нумеруй последовательности (номер, или таймстамп или еще что) Товарищ, чем вам "Id int identity" не нумерация последовательности? Считайте, что у каждого значения есть порядковый номер и/или дата создания записи. Или что по вашему "порядок в СУБД"? >> и не обзывай адекватов >> а то забаню нафиг!!! Тяжелый понедельник? >> этот вопрос наверно лучше было бы задать в ветку по БД Не лучше, поскольку задача, скорей касается LINQ + ORM. Считайте, что каждая запись - это класс типа { Id, [Time, ] Value }. P.s. Если дельного предложения нет или вы не можете дать ответ, то зачем писать "вопрос глупый". Я по вашему попросил помощи у здравомыслящей общественности просто так? Предварительно не взвесив все "за" и "против"? Охотно приму все ответы, включая те, которые укажут, что данная задача не имеет простого решения с обоснованием "почему". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 14:34 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
Konst_One, Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 14:36 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
AlexMAS, в условии нигде не было написано что айдишка это упорядочивающий элемент видимо увидал слово глупый и кровавая пелена затмила разум а в ветку по БД таки пошел ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 14:56 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
няка, на int id не обратил внимание тогда можно выбрать выбираем допустим все 10 - ки сортируем по ИД анализируем не разрывает ли порядок в ИД запись с другим значением точки разрыва = начало / конец группы ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 15:01 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
первая последовательность десяток сортироана по ID, если искать 2ую и в том же духе последовательности, то надо дополнительные ROW_NUMBER крутить в подзапросы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 11:27 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
для NHibernate named queries ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 11:29 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
stimpi, как то очень сложно я бы написал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 13:18 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
няка, это если у вас айдентити без гапов ) на таком списке id value1 52 53 54 106 107 108 59 510 511 1012 1013 1014 515 516 5 выдаст только id value4 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 13:48 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
stimpi, так автор условие на упорядочивание данных ваще не описал а если на скаку менять условия, то можно вообще никогда ничего не написать ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 13:52 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
можно вставить еще один роунамбер и будет пофиг на гапы в айдишках ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 13:54 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
няка, роунамбер на роунамбер ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 13:57 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
stimpi, http://www.youtube.com/watch?v=iOnHtPHiCLw ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 14:53 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
Спасибо всем за советы. Соглашусь, что в поставленной выше задаче, скорей, самым "простым" решением будет какой-нибудь запрос с подзапросом с использованием функции ROW_NUMBER(). Думаю, в данном варианте проще (наглядней, читабельней) будет анализировать две соседних записи и искать точки "разрыва", как предлагал в самом начале ViPRos. >> так автор условие на упорядочивание данных ваще не описал У каждой записи со значением есть идентификатор. Можно считать, что он identity, но там есть gap's, поскольку в оригинальной задачи записи упорядочены по времени создания. Я, скорей, допустил небольшую неточность в постановке задачи, т.к. хотел ее сделать более общей. В частности попросил выбрать первую группу записей со значением "10". Возможно, задача покажется более интересной, если я добавлю немного деталей... На самом деле все эти записи - это данные от некоторого датчика. Грубо говоря, в таблице базы данных хранится последовательность сигналов в виде, а сама таблица имеет вид вроде этого: declare @signals table (Time datetime, Value float) Суть в том, что из всей последовательности таких сигналов нужно выбрать группы, значение которых превышает определенных порог (~ удовлетворяет некоторым критериям, которые в дальнейшем могут изменяться). Если условиться, что порог равен 10, то в следующем наборе: ..., 2, 3, 1, 2, 5, 3, 10 , 11 , 15 , 1, 2, 2, 12 , 14 , 10 , 1, 0, 2, ... нужно выбрать 2 группы: (10, 11, 15) и (12, 14, 10). Вместе с этим есть потребность выбрать только первую группу, например, начиная с указанного времени. Как раз эта задача и была поставлена в самом начале. Критерий выбора группы - это какое-то бизнес-правило, которое будет инкапсулировать какая-нибудь спецификация. С этим все понятно. Сейчас меня по большей части волнует вопрос производительности: как лучше - загрузить список и проанализировать или написать "хитрый" запрос... Пока склоняюсь к первому варианту. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 15:01 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
AlexMAS, гапсы устранить еще одним роунамбером не проблема, как я уже написал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
насчет производительности хз, если это критично, то нада тестить ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 15:09 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
посмотрите тему 10818697 вот так еще можно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 16:43 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
stimpi, ужс, у вас извращенный мозх ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 18:52 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
няка, мы не ищем легких путей ) Надо бы ваш вариант на профпригодность (быстродействие) проверить на больших объемах данных ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 00:16 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
stimpi, так на вскидку если, думаю ваш вариант будет быстрее но возможно оптимизатор сукеля будет другого мнения ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 11:00 |
|
Выборка первой группы записей
|
|||
---|---|---|---|
#18+
няка, тестовые данные на 100000 записей Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
без индекса по айдихе няка(ms) stimpi(ms)140-200 40-70 с индексом по айдихе няка(ms) stimpi(ms)20-30 20-30 с индексом по айдихе оба запроса дали абсолютно одинаковый результат ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 11:28 |
|
|
start [/forum/topic.php?fid=17&fpage=42&tid=1350685]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 148ms |
0 / 0 |