|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Добрый день, всем. Есть такая табличка: Код: sql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Возможно ли, как-то, запросом получить непрерывный диапазоны квартир с одинаковой стоимостью. Ключевые поля для отбора: Код Ул., №дома, корп. На номер по порядку можно не реагировать, его легко можно изменить ;) Другими словами получить вот такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 11:59 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
№дома, код ул. и корп. чуть-чуть сместились ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 12:00 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, WHERE ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 12:02 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Оконные функции?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 12:23 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, если непрерывность диапазона квартир относительно ключевых полей где-то прерывается, тогда что надо получить? Максимально большой диапазон? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 12:58 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
rdb_devakrush, если непрерывность диапазона квартир относительно ключевых полей где-то прерывается, тогда что надо получить? Максимально большой диапазон? 2 диапазона с разрывом ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:10 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrushДругими словами получить вот такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:13 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
S.G.akrushДругими словами получить вот такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:15 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
проще всего это сделать хранимой процедурой или execute block ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:18 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrushrdb_devakrush, если непрерывность диапазона квартир относительно ключевых полей где-то прерывается, тогда что надо получить? Максимально большой диапазон? 2 диапазона с разрывомих может быть и больше чем два. в общем виде, для одной стоимости, у вас может получиться что-то вида: 278-280, 299-299, 320-323 и т.д. Вы все-таки пересмотрите, что именно надо получить. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:20 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, если не сложно, предоставь данные в удобном для использования виде (через create table / insert или через WITH), ну, чтобы их можно было тупо скопировать в окне браузера, вставить в окно гонялки запросов, нажать кнопку "выполнить" и чтоб оно заработало.... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:21 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, но вообще - группировка по инварианту группы на разности двух разнооконных ROW_NUMBER-ов либо, START_OF_GROUP метод на LEAD/LAG + последующий накопительный итог (SUM() OVER(order by)) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:25 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, что-то я не наблюдаю explain набора строк - имя источника строк и имена полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 13:29 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Добрый Э - Эхakrush, если не сложно, предоставь данные в удобном для использования виде (через create table / insert или через WITH), ну, чтобы их можно было тупо скопировать в окне браузера, вставить в окно гонялки запросов, нажать кнопку "выполнить" и чтоб оно заработало.... Скрипт с инсертами ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 16:27 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, Если бы поле с номером квартиры было бы числового типа, или хотя бы не содержало буквенные символы, то запрос мог бы иметь примерно такой вид: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Но наличие буквенных символов делает неприменимым к полю числовой арифметики. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 05:01 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, Спасибо, попробую. Этого будет достаточно. Квартиры с буквами можно взять отдельно и добавить в итоговую таблицу. Сейчас попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 08:29 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, ibexpert ругается на over( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 09:22 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, версия firebird какая? Оконные функции появились в 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 09:23 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Симонов Денис, сори, забыл указать 2,5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 09:45 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, если 2.5 то хранимка или execute block ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 10:34 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, тогда уже проще при помощи хранимой процедуры делать. но в целом, запрос мог бы выглядеть как-то так: Код: sql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 11:08 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, как считать разрыв номеров квартир более чем на единицу, если поля flat1 и flat2 символьные и могут содержать литеры? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 11:39 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, если поля flat сделать числовыми, а символьные постфиксы вынести в отдельное поле, то, в общих чертах, процедура выглядит так: Код: plsql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 11:51 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, хочу приобрести вот эти квартиры: PRICESTREET_IDBLD_NUMBLD_LITFLAT_FROMFLAT_TO0.01114330.0421а12120.0214330.0111411 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 11:59 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
rdb_devakrush, хочу приобрести вот эти квартиры: PRICESTREET_IDBLD_NUMBLD_LITFLAT_FROMFLAT_TO0.01114330.0421а12120.0214330.0111411 Тариф который указан - это стоимость квартплаты за 1м2 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 12:53 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, тогда арендовать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 18:09 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
rdb_dev, Хочу поднять снова тему и немного уточнить Та процедура, пример которой вы мне дали, если я разделю номера квартир на цифры и символы, выберет только диапазоны квартир без букв. А буквенные квартиры нужно прикрутить самостоятельно. ПРАВИЛЬНО??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 12:19 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Если я правильно понял, то вопрос - возможно ли после выполнения процедуры добавить строчки с квартирами у которых в номере буквы. Как бы выполнить UNION. Чтобы в результате работы процедуры у меня была готовая таблица для выгрузки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 15:26 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, вынесите буквенный постфикс квартиры в отдельное поле и соединяйте его с номером квартиры SELECT'ом в одно поле только если вам нужен информационный вывод этих данных вместе, а хранить в базе и работать над значениями этих полей надо раздельно. При выборке диапазона квартир в предложении WHERE, поле буквенного постфикса не должно учитываться, т.к. оно несет исключительно информационный характер и стряпать по нему условие выборки нет резона. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 10:36 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
rdb_devakrush, вынесите буквенный постфикс квартиры в отдельное поле и соединяйте его с номером квартиры SELECT'ом в одно поле только если вам нужен информационный вывод этих данных вместе, а хранить в базе и работать над значениями этих полей надо раздельно. При выборке диапазона квартир в предложении WHERE, поле буквенного постфикса не должно учитываться, т.к. оно несет исключительно информационный характер и стряпать по нему условие выборки нет резона. Изменил структуру таблицы. Разделил буквы отдельно, цифры отдельно. теперь поле flat11 integer, flat12 varchar, и где нет буквы стоит null. Теперь для того чтобы квартиры с буквами не участвовали в выборке диапазона мне нужно запрос в процедуре изменить на: Код: sql 1. 2. 3. 4. 5.
А уже потом сделать 2 селекта: селект из процедуры юнион селект квартиры с буквами я ПРАВИЛЬНО понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 08:56 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, не понятно зачем выбирать квартиры без литер, а затем соединять с выборкой квартир с литерами. Если я правильно понимаю, тариф за квартиру с литерой может отличаться от тарифа за квартиру с тем же номером, но без литеры и поэтому их нельзя исключать из выборки. Вот как-то так: Код: plsql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 13:25 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, в конце процедуры надо заменить: Код: plsql 1.
на: Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 16:49 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
rdb_dev, Подскажите: если в БД у меня будет украинский язык, обязательно ли указывать при создании таблиц, как вы советовали в процедуре для order by, CHARACTER SET WIN1251 COLLATE WIN1251_UA; ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 08:37 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, начиная с 2.5 для чарсетов можно поменять коллейт по умолчанию. Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 09:09 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, если БД создавалась с указанием collation, то не обязательно. К примеру: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 09:10 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Симонов Денисakrush, начиная с 2.5 для чарсетов можно поменять коллейт по умолчанию. Код: sql 1. 2.
У меня 2,5. подскажите где это сделать или как ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 09:10 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, Уже увидел. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 09:11 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrush, просто выполни оператор. Но учти, что это повлияет на использование набора символов в будущем, кроме случаев, когда явно переопределена сортировка COLLATE. Сортировка существующих доменов, столбцов и переменных PSQL при этом не будет изменена. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 09:12 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
akrushесли в БД у меня будет украинский языкЕсли доп языков (помимо английского, куда ж без басурманского?) более одного, то стОит крепко подумать о юникоде (utf8). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2016, 09:59 |
|
Как определить/получить диапазон
|
|||
---|---|---|---|
#18+
Всем привет. Дабы не плодить темы и так как процедура взята с этой темы, решил написать тут. 1. Таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
2. Процедура: Код: sql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
Прикрепляю файл данными созданный IBExpert скрипт на добавление записей (Insert) Пояснения к данным что касается полей ДАТА DATA_X - дата досрочной остановки (пользователь не видит этой даты). В случае повторного обращения в период действия DATA_X=DATA_S(повторного обращения). В случае если установлена DATA_X, то DATA_E надо отображать как DATA_X-1. На примере одного дела покажу что есть и что надо получить: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Хочу получить совет возможно ли оптимизировать код процедуры т.к. процедура взята с этой темы и просто допилена напильником "чтоб работало". Был еще второй вопрос, но пока его писал понял как его решить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 11:53 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560923]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 171ms |
0 / 0 |