Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Добрый день. Помогите пожалуйста правильно составить запрос. Есть несколько таблиц. Таблица А. Надо получить сумму ячейки Status по определенному [OID] за определенный промежуток даты: Код: sql 1. 2. 3. 4. 5. 6. Таблица Б. Тут нужно получить последнюю дату где [view] = простой, которую надо игнорировать во время опроса Таблицы А: Код: sql 1. 2. 3. Таблица В. Тут список [OID] которые нужно получить во время всего опроса: Код: sql 1. 2. 3. 4. То-есть: 1) берем наш [IP] = 1.2.3.4 . 2) Вытягиваем 3 [OID] из Таблицы В. 3) Суммируем колонку Status из Таблицы А, каждый [OID] по отдельности за определенный период времени. 4) Во время суммирования Status из Таблица А игнорируем время превышающее дату из Таблицы Б, но только у [OID] который прописан в Таблице Б. Вот с четвертым пунктом у меня проблемы. Может можно как то сделать это одним запросом? Сейчас запрос без четвертого пункта выглядит так: Код: sql 1. 2. 3. 4. 5. 6. 7. Может можно как то добавить к запросу: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 08:37 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_Artur, вам, для начала, нужно посчитать отдельно все агрегаты по требуемым промежуткам, а уж затем - собирать результат угрегации данных в единую выборку. Иначе получите многократное задублирование данных и неверные суммы.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 08:44 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Я мягко говоря не силен в запросах, приведите пример пожалуйста. Я уж как нибудь подстрою под свои нужды =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 08:48 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Как-то так Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 09:19 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Тебе Таблицу Б надо отдельно спартиционировать (чтоб остались только максимальные даты для каждого ОИД -смотри код внизу) А потом NOT EXIST-ом сказать : "Нехочу тех из парициона, которые удовлетворяют (или наоборот неудовлетворяют) таким то требованиям" Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 09:34 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
ORDER BY Date desc и точка с запятой лишние ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 09:37 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
student-uni, Спасибо, сейчас буду пробовать =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 09:40 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
student-uni, Вот так если написать выходит ошибка: неправильный синтаксис около ключевого слова "OVER" Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 09:56 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_Artur, а зачем вы туда пишете? OVER(PARTITION BY OID )? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 09:59 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
TaPaK, Ну вот я в select вставил, ошибок нет, но и выборки нет. Плохо разбираюсь я, учусь только: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 10:06 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_Artur, SELECT sum(TA.Status) AS status, TB.OID AS oid FROM ТаблицаА AS TA LEFT JION ТаблицаВ AS TB ON TA.OID = TB.OID WHERE TB.IP = '1.2.3.4' AND TA.Date BETWEEN DATEADD(hour, 7, DATEDIFF(dd, 0, GETDATE())) AND DATEADD(hour, 19, DATEDIFF(dd, 0, GETDATE())) AND NOT EXISTS ( SELECT * FROM ( SELECT TOP (1) WITH TIES OID, Date FROM TABLITSA_B WHERE [view] = 'простой' order by row_number() over (partition by OID order by Date desc) ) AS LastOidDate WHERE LastOidDate.OID = TA.OID AND TA.Date > LastOidDate.Date ) GROUP BY TB.OID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 10:07 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
student-uni, выводит пустой результат. В таблицеБ может вообще не быть данных, может из за этого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 10:49 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_Artur, что выдает Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 10:50 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_Artur, Код: 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.02.2019, 11:07 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#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.02.2019, 11:14 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
student-uniHopfen_Artur, что выдает Код: sql 1. 2. 3. 4. 5. выдает такой результат: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 11:21 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
invm, спасибо, сейчас попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 11:21 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_Artur, Left Join не нужен и вместо TB.OID ставим TA.OID Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 11:34 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
student-uni, Спасибо вам большое. Я попробую доработать вариант invm . У него учитывается промежуток времени Таблицы Б. invm, Запрос работает ,спасибо. Но подскажи пожалуйста как добавить условие. Мы сейчас берем максимальную дату с соответствующим OID. Но нужно игнорировать ее, если View != 'простой'. То-есть получили максимальную дату и посмотрели колонку View. Если не соответствует, игнорируем. Можно ли так сделать? Может сам додумаюсь, заранее спасибо =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 11:39 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_ArturНо нужно игнорировать ее, если View != 'простой'Добавить соответствующее условие в where запроса к ТаблицаБ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 11:48 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
invmHopfen_ArturНо нужно игнорировать ее, если View != 'простой'Добавить соответствующее условие в where запроса к ТаблицаБ. А он разве не будет искать последнюю дату именно где View != 'простой' ? Допустим ТаблицаБ: Код: sql 1. 2. 3. Если я просто напишу WHERE View = 'простой' он выберет вторую строку, хотя в таблице есть дата с более максимальным временем. А если напишу WHERE View != 'простой' то при такой таблице : Код: sql 1. 2. 3. Выберет вторую строку, что в корне не верно. Ведь нам нужны именно View == 'простой'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 12:04 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_Arturstudent-uni, Спасибо вам большое. Я попробую доработать вариант invm . У него учитывается промежуток времени Таблицы Б. invm, Запрос работает ,спасибо. Но подскажи пожалуйста как добавить условие. Мы сейчас берем максимальную дату с соответствующим OID. Но нужно игнорировать ее, если View != 'простой'. То-есть получили максимальную дату и посмотрели колонку View. Если не соответствует, игнорируем. Можно ли так сделать? Может сам додумаюсь, заранее спасибо =) Держись, юзер! не выдавай тайну, какая версия сервера! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 12:10 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Hopfen_ArturА он разве не будет искать последнюю дату именно где View != 'простой' ?Будет. Вам нужно игнорировать, когда у максимальной StartDate для OID View = 'простой'? Тогда так: Код: 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.02.2019, 12:32 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
invm, Спасибо большое, очень выручили . Буду разбираться как это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 13:16 |
|
||
|
Направьте на путь истинный в составлении запроса =)
|
|||
|---|---|---|---|
|
#18+
Еще такой вопрос. Допустим в промежутке выборки даты вообще нет данных: Код: sql 1. допустим наша Таблица В Код: sql 1. 2. 3. 4. По OID AA9ADECE-F455 за промежуток времени вообще нет данных. Результат выборки будет такой: Код: sql 1. 2. 3. А хотелось бы такой результат: Код: sql 1. 2. 3. 4. Я пробовал так: Код: sql 1. Но оно видимо предполагает что данные за промежуток есть, но они равны null. Может кто сталкивался с подобной проблемой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2019, 14:20 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39779217&tid=1688229]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
125ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 427ms |

| 0 / 0 |
