|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Добрый день! Помогите, пожалуйста, умным советом. У идентификатора ID есть три атрибута: A, B и C. История изменения каждого атрибута лежит в своей таблице. Например: ID A1 a_start_date_1 a_end_date_1 ID A2 a_start_date_2 a_end_date_2 ID B1 b_start_date_1 b_end_date_1 ID B2 b_start_date_2 b_end_date_2 ID C1 c_start_date_1 c_end_date_1 ID C2 c_start_date_2 c_end_date_2 Нужно написать скрипт, который совместно показывает состояние каждого атрибута на любой момент времени, т.е. должно получиться несколько строчек вида: ... ID A1 B1 C1 a_start_date_1 b_end_date_1 ID A1 B2 C1 b_start_date_2 c_end_date_1 ... Любой PL/SQL запрещен. Намекните, пожалуйста, как это сделать? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2021, 16:36 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Anitik, select * from a1 where id=:id union all select * from b1 where id=:id union all select * from c1 where id=:id ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2021, 21:00 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
igaraev Anitik, select * from a1 where id=:id union all select * from b1 where id=:id union all select * from c1 where id=:id Извините, это Вы так пошутили? : )) Нужно отследить непротиворечивость дат в каждой строке окончательной таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 09:32 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Anitik, Я не пошутил. Если нужно добавить даты это не сложно сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 10:05 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Anitik Добрый день! Помогите, пожалуйста, умным советом. У идентификатора ID есть три атрибута: A, B и C. История изменения каждого атрибута лежит в своей таблице. Например: ID A1 a_start_date_1 a_end_date_1 ID A2 a_start_date_2 a_end_date_2 ID B1 b_start_date_1 b_end_date_1 ID B2 b_start_date_2 b_end_date_2 ID C1 c_start_date_1 c_end_date_1 ID C2 c_start_date_2 c_end_date_2 Нужно написать скрипт, который совместно показывает состояние каждого атрибута на любой момент времени, т.е. должно получиться несколько строчек вида: ... ID A1 B1 C1 a_start_date_1 b_end_date_1 ID A1 B2 C1 b_start_date_2 c_end_date_1 ... Любой PL/SQL запрещен. Намекните, пожалуйста, как это сделать? Спасибо! ничего не понял авторлежит в своей таблице. для каждого атрибута своя таблица (три таблицы)? авторна любой момент времени дырок нет? авторID A1 B1 C1 a_start_date_1 b_end_date_1 по какому принцыпу выбраны даты? авторнесколько строчек вида: раз строчек не одна, зачит есть пересечения интервалов в истории изменений (несколько значений на момент времени)? зы покажите на примере данных with t as( select ... ) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:12 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Anitik, Даже Stax ругаться стал! Мессир, на сайте с 2012 года, а правила даже не открывал памятка: HOWTO :: Как правильно задавать вопросы Как мне оформить свое сообщение? Студентам, желающим помощи 1) Полная постановка задачи (без сокращений) 2) Подготовьте тестовые данные, лучше в виде with пример (не ваш случай) в конце 3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot) 4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение Пример подготовленных данных, запроса и вывода. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:52 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Anitik показывает состояние каждого атрибута на любой момент времени ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:54 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Vadim Lejnin Anitik, Даже Stax ругаться стал! я не ругался Утро, понедельник, не пробудился еще и не понял что надо то ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 12:04 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Пардон муа! Код: 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.
Код: 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.
Вот, что должно получиться в итоге в этом простом примере (надеюсь, не накосячила): Код: 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.
Дырки могут быть, т.е. есть периоды времени, когда какой-то атрибут не задан. Это тоже нужно показать в итоговой таблице. И, как видите, end_date предыдущей записи и start_date следующей записи обычно совпадают. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 20:01 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Hmm... авторУ идентификатора ID есть три атрибута: A, B и C. История изменения каждого атрибута лежит в своей таблице. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Точно изменения атрибута B2 в таблице tmp_a? А так для тестирования можно было сделать так: тестовые данные: Код: 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.
Ожидаемый Результат: 1'A1''01.01.2020''10.01.2020'1'A1''B1''10.01.2020''20.01.2020'1'A1''B1''C1''20.01.2020''01.02.2020'1'A2''B1''C1''01.02.2020''10.02.2020'1'A2''B2''C1''10.02.2020''20.02.2020' Но видимо после работы не варит голова как связаны A1 и A2? Это один атрибут? и куда делся A3 в результате? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 21:46 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Мда, не разработчик я... Маладой Кракадил Подскажите где туплю? Вроде все разрисовал, но без least/case/greatest получается Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Вот и влепил с досады молодого крокодила... Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 23:24 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Да, накосячила немного с исходными данными, спасибо, что поправили! (не увидела кнопочки "Редактировать сообщение", есть такая?) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 23:30 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Вот такой таблички я, конечно, не смогу себе позволить: select * from tmp_a union all select * from tmp_b union all select * from tmp_c Потому что в реальности tmp_a, tmp_b и tmp_c - очень большие. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 23:36 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Anitik, Если вы ищете по одному ID, то мой вариант предложенный ранее будет работать быстро. А если вы вначале будите объединять таблички а потом искать ID то возможно и долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 07:56 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Anitik Вот такой таблички я, конечно, не смогу себе позволить: select * from tmp_a union all select * from tmp_b union all select * from tmp_c Потому что в реальности tmp_a, tmp_b и tmp_c - очень большие. Вам надо "на любой момент времени" поетому select * from tmp_a where start_date<=:v_moment and end_date > :v_moment union all select * from tmp_b where start_date<=:v_moment and end_date > :v_moment union all select * from tmp_c where start_date<=:v_moment and end_date > :v_moment ето уже не миллионы, а скажем сотни получим задачку на пересечение интервалов , на форуме решалась очень часто, есть много вариантов (даж с рисунками) конкретно в Вашем случае А В С можно считать, что ето напр цвета (красный синий зеленый) если интевальчики пересекаются получим микс, напр АС со строками работать чутку тяжелее, чем с числами для упрощения можно принять А=1 В=10 С=100 тогда А пересекается с С --> 1+100=101 В пересекается с С --> 10+100=110 и тд зы в древних версиях, економили, и часто использовали биты .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 10:07 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
вдогонку часто такие задачи ставят не "на момент времени", а за период (декада, месяц, квартал) с даты, по дату ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 10:26 |
|
Научите как написать запрос пжл
|
|||
---|---|---|---|
#18+
Спасибо большое всем за советы и помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 11:16 |
|
|
start [/forum/topic.php?fid=52&msg=40103454&tid=1879811]: |
0ms |
get settings: |
27ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
341ms |
get tp. blocked users: |
2ms |
others: | 374ms |
total: | 828ms |
0 / 0 |