|
|
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Нужна помощь с запросом Есть таблица "Users" в ней есть колонки "Data" формат timestamp without time zone "State" формат integer (1- не на работе, 2- на рабочем месте 3 - выполняет задание) "IDUser" формат bigint Мне нужно получить список пользователей, которые с 5 утра до 7 утра получили статус 2 (вышли на работу) но перед тем как его получить у них был статус 1 (отдыхали) дабы отсеять тех кто работал в ночь и перешел из статуса 3 по окончании своего задания. Как то так. Меня хватило только на этот запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2015, 19:17 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_admin, Предоставьте примерные данные (в форме INSERT-ов или генерирующего SELECT-а), а также ожидаемый результат для этих данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2015, 19:48 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_adminно перед тем как его получить у них был статус 1 (отдыхали) дабы отсеять тех кто работал в ночьперед - скользкий критерий. длительность, интервал с-по. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2015, 20:10 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_admin, в таблице "Users", я так понимаю, хранятся точки смены состояния работника? соответственно, состояние действует с момента своего начала до момента следующего состояния (сортировка в разрезе работника по полю с датой). Если так, то можно смотреть в сторону оконных функций LEAD/LAG для получения "следующего"/"предыдущего" статуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 05:17 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Есть User 001 который 05-07-2015 17:00:00:000 ушел на выходные в таблице в это время поставилось для него состояние 1 а 07-07-2015 05:01:00:000 вышел на работу (в это время прописалось состояние 2) Есть второй User 002 который закончил работу 06-07-2015 15:00:00:000 (получил статус 1) и вышел 07-07-2015 06:30:00:000 (получил состояние 2) И есть третий User 003 который закончил работу 05-07-2015 19:00:00:000 (перешел в состояние 1) и вышел на работу 07-07-2015 01:00:00:000 (получил состояние 2) и все это время выполнял задания 07-07-2015 01:10:00:000 взял задание и приступил к работе (получил статус 3), а через 30 минут его закончил 07-07-2015 01:40:00:000 (опять получил состояние 2) и так в течении ночи и 07-07-2015 04:59:00:000 опять взял задание которое закончил 07-07-2015 05:45:00:000 и продолжает работать. Если сделать выборку в интервале времени по состоянию 2 то все они с 5 до 7 утра имели состояние 2, но User 003 мне не нужен т.к. он выполнял работал в ночь, а User 001 и 002 только вышли на работу вот они меня и интересуют. Таблица с данными UserStateDate001105-07-2015 17:00:00:000003105-07-2015 19:00:00:000002106-07-2015 15:00:00:000003207-07-2015 01:00:00:000003307-07-2015 01:10:00:000003207-07-2015 01:40:00:000...............................003307-07-2015 04:59:00:000001207-07-2015 05:01:00:000001207-07-2015 05:01:01:000003207-07-2015 05:45:00:000002207-07-2015 06:30:00:000 Бывают такие моменты когда состояние 2 может поставится 2 или 3и раза с разницей в секунду (Web интерфейс) Результат должен быть User001002 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 09:18 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Нашел выход с помощью EXCEPT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 11:09 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_admin, нашел - показывай... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2015, 06:41 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2015, 08:43 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_admin, такой же результат можно получить с помощью having без повторного обращения к таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2015, 11:42 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_admin Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. evil_adminМне нужно получить список пользователей, которые с 5 утра до 7 утра получили статус 2 (вышли на работу) но перед тем как его получить у них был статус 1 (отдыхали) дабы отсеять тех кто работал в ночь и перешел из статуса 3 по окончании своего задания. Как то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 06:08 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 11:45 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Kvasnikov Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Спасибо то что надо. Еще вопрос попутно, можно ли как нибудь объявить дату в переменную один раз (это надо для того что бы за предыдущие дни смотреть отчет и каждый раз не менять даты везде, где они встречаются)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 17:20 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Вот этот вопрос самого интересует. Дайте знать, если научитесь это делать )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 17:50 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Kvasnikov, молодые люди, вы конечно и дальше можете обмениваться любезностями но вот за это Код: sql 1. вместо Код: sql 1. руки надо выдирать с корнем из jопы и да, по переменным/параметрам -- PREPARE /EXECUTE -- http://www.postgresql.org/docs/current/static/sql-prepare.html или CREATE FUNCTION -- http://www.postgresql.org/docs/current/static/sql-createfunction.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 18:07 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_adminЕще вопрос попутно, можно ли как нибудь объявить дату в переменную один раз (это надо для того что бы за предыдущие дни смотреть отчет и каждый раз не менять даты везде, где они встречаются)? Старайтесь думать реляциями, это же SQL. Сформируйте таблицу при помощи `WITH` конструкции, потом присоединяйте ее к вашим данным: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 19:11 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
evil_admin Kvasnikov Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Спасибо то что надо.Вы уверены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 04:47 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
qwwqKvasnikov, но вот за это Код: sql 1. вместо Код: sql 1. руки надо выдирать с корнем из jопы Qwwq, спасибо, что обратили на это внимание. Но раз уж вы решили искоренять невежество, то, пожалуйста, объясните почему так не надо делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 10:31 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Kvasnikov, Ну для начала вы потеряли все записи между 04:59:59 и 05:00:00 :) -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 10:42 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Kvasnikov пожалуйста, объясните почему так не надо делать по определению. есть анекдот про старого еврея-- портного, сына и отрез сыну на брюки вероятно время квантуется, но не такими порциями хотя есть вариант типа timestamp[tz] , с точностью timestamp(0) когда отрез можно сделать и по-вашему. но на хера руку ломать ? эту 1С-ную привычку надо искоренять, вместе с 1С -- конфигурастами и 1С вообще, как эталонной говноконторой. судя по всему, если бы своевременно абортировали братцев не то нуралиевых не то нургалиевых -- дегенератов, которым надо бы было втирать про открытые, полуоткрытые, и закрытые интервалы в стране бы поуменьшилось. и идиотских вопросов после явного указания правильного кейса никто бы не задавал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 10:44 |
|
||
|
Нужна помощь с запросом
|
|||
|---|---|---|---|
|
#18+
Щукина АннаВы уверены? Я понимаю, нет предела совершенству, но в данный момент отчет выполняется быстро и корректно (разумеется я немного его исправил). Если знаете как сделать все по фэншую, будьте добры покажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 12:34 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=108&tid=1997891]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 380ms |

| 0 / 0 |
