|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
Доброе время суток! Наверняка похожий запрос звучал. но что-то не могу найти. Код: 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. 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. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 09:38 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
Почитайье про GROUP BY ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 10:18 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
homik, Если нужно просто иметь декартово произведение вариантов, то измените предикат where например, так: where lgkat.schet=cschet ; and lgkat.filter_uch=uch_per ; and between(dMes_teck+days.day-1, lgkat.date_first, lgkat.date_last); Здесь убрана связь между двумя курсорами. Может это то, что нужно. Если нет, то занесите в курсоры по 2-3-4 записи и покажите нам _только то, что при этом должно быть на "выходе"_. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 10:58 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
igorbikwhere lgkat.schet=cschet ; and lgkat.filter_uch=uch_per ; and between(dMes_teck+days.day-1, lgkat.date_first, lgkat.date_last); В предикат еще добавьте and days.date_month=mes_rasch; (не увидел сразу) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 11:18 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-roll, Что-то вы там долго набираете данные, а у меня уже время заканчивается. Так что попробуйте вот это для интереса: sele * ; from lgkat, tarlgot, days ; where lgkat.schet = cschet ; and lgkat.filter_uch=uch_per ; and between (dMes_teck+days.day-1, lgkat.date_first, lgkat.date_last) ; and days.date_month=mes_rasch ; order by day Поле Day есть аналог вашего variant. Если похоже, то уберите лишние столбцы из запроса. Если нет, то сделайте в форум сообщение с теми данными, что я просил раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 12:51 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
Variant совсем не аналог Day. Group by должен быть- сам попой чувствую, но как его применить- никак сообразить не могу. Наверно не до конца сформировал задачу. Просто расчет льгот имеет ряд жестких правил (позиция льготы(первая вторая и тд) имеет значении так же выделяется на любую не специальную tarlgot.special дополнительное значение). Но ‘ограничений’, какой льготой абонент вправе воспользоваться в первую очередь, какой во вторую, нет. На какую кинуть дополнительное свойство тоже ограничения нет(единственное нельзя на определенные типы льгот tarlgot.special=.t.) Уже сейчас имеютя льготы с процентами 0.50,0 и 0.25,0.25 по разным услугам Вот и подумал независимо от ситуации находить для абонента оптимально вариант. (просто рассчитать по всем вариантам и выбрать первый лучший). А для этого и нужен сей курсорчег (желательно одним запросом) В первом примере запрос ‘видит’ у абонента первого октября 2009 две льготы обе не специальные надо описать четыре варианта их “расположения” (два варианта позиционирования)*(два варианта распределения доп свойства) Во втором примере запрос ‘видит’ у абонента первого сентября 2009 две льготы одну специальную вторую нет надо описать два варианта их “расположения” (два варианта позиционирования)*(один вариант распределения доп свойства) Re: запрос по количеству вариантов igorbik Если нет, то занесите в курсоры по 2-3-4 записи и покажите нам _только то, что при этом должно быть на "выходе"_. тю, ну пусть будет так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 14:37 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-roll, Ну, теперь покажите в виде таблицы, что из этого должно быть на выходе из запроса. Именно из этих данных, и именно так, как нужно, и в нужном количестве строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 14:53 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
igorbik, К сожалению, исчезаю на несколько часов. Пишите результирующую таблицу, если никто не поможет, то через неск. часов посмотрим. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 15:34 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
Желаемый результат при Код: plaintext 1. 2. 3. 4.
day num_lgot un_code variant position rsp_special1 1 001 1 1 .t.1 3 003 1 2 .f.1 1 001 2 2 .t. 1 3 003 2 1 .f.1 1 001 3 1 .f. 1 3 003 3 2 .t.1 1 001 4 2 .f. 1 3 003 4 1 .t. при Код: plaintext 1. 2. 3. 4.
day num_lgot un_code variant position rsp_special 1 1 001 1 1 .t. 1 2 002 1 2 .f. 1 1 001 2 2 .t. 1 2 002 2 1 .f. пардон что кусками ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 15:56 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-rollЖелаемый результат при Код: plaintext 1. 2. 3. 4.
day num_lgot un_code variant position rsp_special1 1 001 1 1 .t.1 3 003 1 2 .f.1 1 001 2 2 .t. 1 3 003 2 1 .f.1 1 001 3 1 .f. 1 3 003 3 2 .t.1 1 001 4 2 .f. 1 3 003 4 1 .t. при Код: plaintext 1. 2. 3. 4.
day num_lgot un_code variant position rsp_special 1 1 001 1 1 .t. 1 2 002 1 2 .f. 1 1 001 2 2 .t. 1 2 002 2 1 .f. пардон что кусками Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 16:28 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
вот именно только наоборот rsp_special=!tarlgot.special(но .t. только один в варианте если вообще есть) извените здесь надо было путаницу убрать-сделать однотипными темболее rsp_special еще не существует tarlgot.special=.t. это свойство льготы 'специальная'(их мало видов на них доп свойство не распространяется) просто думал rsp_special=.t. в результате- единственный в варианте если есть на которй это свойство распространилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 20:23 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-roll, Попробуйте либо более вразумительно определить зависимость между rsp_special и tarlgot.special или другими полями. Или перерисуйте выводную табличку так, чтобы там не было rsp_special, но появился tarlgot.special. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 22:24 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-rollвот именно только наоборот rsp_special=!tarlgot.special(но .t. только один в варианте если вообще есть) извените здесь надо было путаницу убрать-сделать однотипными темболее rsp_special еще не существует tarlgot.special=.t. это свойство льготы 'специальная'(их мало видов на них доп свойство не распространяется) просто думал rsp_special=.t. в результате- единственный в варианте если есть на которй это свойство распространилось. Пока Вы сами не определитесь с человеческой постановкой вопроса,думаю понять мы вас не сможем. Выкиньте из вопроса таблицы не относящиеся к делу и оставьте необходимый минимум с несколькими вариантами записей. Что есть: Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2009, 09:44 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
хороше попробую так: Есть два тейбла tabel2- наборы свойств (сдесь свойст много но все обычные,но special=.t. означает что некое свойство может быть а может нет. при .f. при точно нет) Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3.
un_code special svoistvo1 1.t.10 2.t.20 теперь нужно перебрать все варианты позицианирования этих записей, обозвав каждое значение уникальным variant указать позицию un_code special svoistvo1 variant position 1.t.1011 2.t.2012 1.t.1022 2.t.2021 те два варианта в первом набор свойств un_code=1 поставили на первую позицию un_code=2 на вторю позиция во втором варианте наоборот Теперь про tabel2.special=.t. - на этот набор доп свойство может распространяться,но распространиться только на одну в 'варианте' итого всего четыре варианта un_code special svoistvo1 variant position 1.t.1011 2.f.2012 1.t.1022 2.f.2021 1.f.1031 2.t.2032 1.f.1042 2.t.2041 это и есть желаемый результат соответственно при some_per=ctod('03/01/2009') хотелось бы видеть un_code special svoistvo1 variant position2.t.20113.f.30122.t.30223.f.3021 а при some_per=ctod('04/01/2009') хотелось бы видеть un_code special svoistvo1 variant position3.f.30114.f.30123.f.30224.f.3021 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2009, 13:45 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-roll un_code special svoistvo1 variant position2.t.20113.f.30122.t.30223.f.3021 Здесь все правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2009, 14:12 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
un_code special svoistvo1 variant position2.t.20113.f.30122.t.20223.f.3021 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2009, 14:26 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-roll,но special=.t. означает что некое свойство может быть а может нет. при .f. при точно нет Т.о. при Код: plaintext
a при Код: plaintext
Это имелось ввиду? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2009, 15:20 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
rock-n-roll, Просмотрев материалы с чисто формальным подходом, я могу сделать предварительные выводы. 1. Одним запросом не сделаем все сразу, кроме того запроса, что уже сделан. В результате получаем 1-ю таблицу размером 3*N (N- число строк, которые мы заранее предсказать не сможем, но можем определить после запроса через RECCOUNT(), или _TALLY, или с новым запросом через COUNT()). 2. Да, размножение здесь не декартово, а факториальное. А для этого случая нужно создавать курсор со структурой конечной таблицы, и путем перебора полученного запроса с помощью N вложенных циклов FOR...ENDFOR заполнить этот курсор, чтобы получить 2-ю таблицу. 3. После этого нужно по какому-то алгоритму (вот тут непонятно пока) добавить еще какое-то количество (похоже, N или 2*N) строк, изменив при этом значения в поле SPECIAL хотя бы по формальному алгоритму. Самое неприятное, что часть 2 мы не сможем сделать, не зная N... Если так, то стоит ли мучиться и строить факториальные процессы размножения данных? Если же проблема ОЧЕНЬ актуальна, то есть смысл в ТОЧНОМ определении алгоритма формирования поля SPECIAL, а потом нужно проштудировать все книги Кнута в поисках похожего решения. Это ИМХО. Может, кто-то мыслит иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2009, 00:03 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
Ох -хо хох циклом то как - понятно. Нехотелость. Спс Всем Большое. Прошу модератора закрыть топ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2009, 09:16 |
|
запрос по количеству вариантов
|
|||
---|---|---|---|
#18+
Ну и в догонку пока не ‘закрыли’ Перепоставил задачу Курсор Код: plaintext 1. 2. 3. 4. 5. 6.
day … special … fampl 1 … .f. … .f. 1 … .t. … .f. 2 … .f. … .f. 2 … .t. … .f. 2 … .t. … .f. 3 … .f. … .f. 3 … .f. … .f. На что бы так заменить ‘.f. as fampl’ чтобы разрезе дня(day) курсор давал fampl=.t. при первом special=.t. но только при одном . Те. Курсор выдал следующее day … special … fampl 1 … .f. … .f. 1 … .t. … .t. 2 … .f. … .f. 2 … .t. … .t. 2 … .t. … .f. 3 … .f. … .f. 3 … .f. … .f. Заранее благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2009, 16:52 |
|
|
start [/forum/topic.php?fid=41&msg=36300568&tid=1585867]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 353ms |
total: | 487ms |
0 / 0 |