Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: dbms_parallel_execute

Доброго времени суток.

в Oracle 11.2 появился сей пакет, но что-то не получатся с помощь него запараллелить выполнение процедур.

Например, есть 2 процедуры (prc1 и prc2, в обоих есть in параметры), одна вызывает другую.
мне необходимо запустить prc1 как обычно, а в ней две prc2 в параллель, но prc2 должна вызваться с разными параметрами (т.е. prc1 по своей логике выставит нужные in параметры для prc2).

может кто подкинуть примерчик использования dbms_parallel_execute в подобной ситуации?

пысы: вариант распараллеливания джобами - не вариант.
Ответ: Подскажите, куда при использование DBMS_PARALLEL_EXECUTE воткнуть инициализацию пакетных переменных для каждого job`а?

Если инициализацию сделать часть выполняемого job-ами кода, то он их будет запускать на каждую выполняемую запись из заданий. Задания созданы таким образом, что start_id и end_id одинаковые (большой разброс времени обработки каждого id).

Можно конечно запускать инициализацию каждый раз и проверять инициализированы переменные или нет, но хочется более красивого решения.
Вопрос: DBMS_PARALLEL_EXECUTE. Странный размер chunk_size

Всем привет.
У меня следующая задача. Сконвертировать поля типа RAW в поля типа BLOB. Я добавляю в таблицу два новых поля blob_field1 и blob_fileld2. Обновляю их этой процедурой:
procedure convert_data(p_start_id     rowid,
                       p_end_id       rowid) is
...
begin
  select count(1) into v_count from my_table where rowid between p_start_id and p_end_id;
  if v_count > 0 then

    update my_table 
    set blob_field1 = raw_field1 ,
        blob_field2 = raw_field2
    where rowid between p_start_id and p_end_id;
    v_rec_count := SQL%ROWCOUNT;

    commit;
  end if;
end convert_data;


Которую запускаю в параллели таким кодом:
    v_chunk_size              integer := 5000; -- размер блока не более 5000 строк.
	v_parallel_threads        pls_integer := SOME_VALUE; -- равен половине процессоров (CPU_COUNT)
 -- Конвертирование данных запускаем в параллельных потоках (джобами)
        -- Разбиваем таблицу на chunks по 5000 строк (не более), чтобы не забить undo сегменты даже "слабых" серверов
        DBMS_PARALLEL_EXECUTE.create_task (task_name => l_task);
        DBMS_PARALLEL_EXECUTE.create_chunks_by_rowid(task_name   => l_task,
                                                     table_owner => v_owner,
                                                     table_name  => my_table,
                                                     by_row      => TRUE,
                                                     chunk_size  => v_chunk_size);

        l_sql_stmt := 'begin my_package.convert_data(:start_id, :end_id); end;';

        DBMS_PARALLEL_EXECUTE.run_task(task_name      => l_task,
                                       sql_stmt       => l_sql_stmt,
                                       language_flag  => DBMS_SQL.NATIVE,
                                       parallel_level => v_parallel_threads);

        -- If there is error, RESUME it for at most 2 times.
        l_try := 0;
        l_status := DBMS_PARALLEL_EXECUTE.task_status(l_task);
        WHILE(l_try < 2 and l_status != DBMS_PARALLEL_EXECUTE.FINISHED)
        Loop
          l_try := l_try + 1;
          DBMS_PARALLEL_EXECUTE.resume_task(l_task);
          l_status := DBMS_PARALLEL_EXECUTE.task_status(l_task);
        END LOOP;

        drop_parallel_task;


Проблема в том, что несмотря на то, что я указываю chunk_size в 5000 строк он у меня обновляет по 45-48 строк. Если указываю блоки (by_row => FALSE), то это все равно ничего не меняет.
Подскажите, как Оракл определяет кол-во строк для каждого чанка? Можно ли на это влиять?
Ответ: Ссылка на блог вырезалась:
Вопрос: ТОП популярных вопросов

В первую очередь, обратите пожалуйста внимание на FAQ:Получение доступа и использование документации

Раз Вы здесь, то посмотрите еще FAQ: Как мне оформить свое сообщение?

P.S. Раньше все было в одном сообщении, теперь разбросано по нескольким. Старые номера, которые могли быть указаны в сообщениях, перекочевали на новые места:

1. Где можно скачать Oracle? Общие вопросы N1
2. Подскажите среду разработки для Oracle. Общие вопросы N2
3. Как создать автоинкрементное поле, поле-счетчик? SQL, PL/SQL N1
4. Почему в своем pl/sql-коде (представлении/процедуре/триггере/пакете) не удается использовать чужой объект - выдается ошибка ORA-00942 table or view does not exist? Общие вопросы N7
5. Как вернуть запрос из функции? SQL, PL/SQL N4
6. Как обойти мутирование таблиц? SQL, PL/SQL N7
7. Для чего нужна таблица SYS.DUAL? Общие вопросы N6
8. Почему не получается сравнение с пустой строкой? Общие вопросы N8
9. Мне нужно создать из процедуры или пакета PL/SQL временную таблицу, поработать с ней а затем удалить. Как? SQL, PL/SQL N8
10. Трассировка сессий: как получить список запросов, выполняемых сессией (моей, чужой) в Oracle? Общие вопросы N4
11. Как запросом получить требуемое количество записей? SQL, PL/SQL N3
12. Как в PL/SQL работать с массивами? SQL, PL/SQL N9
13. Как в Oracle получить запросом данные из других не-Oracle баз данных? Администрирование и настройка N2
14. Как получить все значения одного поля в одной строке? SQL, PL/SQL N5
15. Где Oracle хранит метаданные о своих объектах? Как получить запросом список пользователей, ролей, объектов БД, скрипт на создание объектов БД? Общие вопросы N5
16. Как перенести базу данных Oracle на другую машину? Как создать копию БД Oracle? Администрирование и настройка N1
17. Как уменьшить размер временного табличного пространства (temporary tablespace) TEMP? Администрирование и настройка N3
18. Как получить историю команд для SQL*Plus, RMan и т.п. на и т.п. на Unix, Linux терминалах? Общие вопросы N3
Ответ: SQL, PL/SQL

1. Вопрос. Как создать автоинкрементное поле, поле-счетчик? Какой существует аналог IDENTITY, AUTOINCREMENT?
Ответ. Воспользоваться таким объектом БД как SEQUENCE: FAQ: Автоинкрементное поле

2. Вопрос. Неуникальные строки, строки-дубликаты: как найти неуникальные строки в таблице, как удалить лишние строки и оставить только уникальные?
Ответ. FAQ: Поиск и удаление строк - дубликатов.

3. Вопрос. Как запросом получить требуемое количество записей?
Ответ.
  • Воспользоваться представлениями из словаря БД вроде ALL_OBJECTS, DBA_OBJECTS.
  • Создать свою таблицу с количеством записей не меньше требуемого.
  • Написать процедуру, возвращающую объектную таблицу с указанным количеством записей.
    Пример обсуждения: select натуральный ряд. Статья в Oracle Magazine: Turning On Pivot Tables.

    4. Вопрос. Как вернуть запрос из функции?
    Ответ. Стандартным средством Oracle для возврата выборки из процедуры/функции является работа с REFCURSOR''ом: FAQ: Курсор(select) из хранимых процедур, функций. Если требуется использовать функцию в секции FROM запроса, то следует воспользоваться: FAQ: Запрос из функции, FAQ: Запрос из функции 2

    5. Вопрос. Как получить все значения одного поля в одной строке, через разделители?
    Ответ. Нужна помощь в составлении запроса., Результат SELECT-а в одну строку, Как получить значения всех строк определенного столбца в одной строке?, недокументированная функция wmsys.WM_CONCAT().
    Обратите внимание на следующий вопрос:

    6. Вопрос. Можно ли написать собственную агрегирующую функцию, например, для конкатенации строк или умножения чисел?
    Ответ. AskTom "Function to concatenate output", “Простые дроби”, “В коробке с карандашами...” или Агрегирующие Функции Определяемые Пользователем.

    7. Вопрос. Как обойти мутирование таблиц? Что означает ошибка ORA-04091 table string.string is mutating, trigger/function may not see it?
    Ответ. Один из примеров: FAQ: Мутирование таблиц

    8. Вопрос. Временные таблицы: существуют ли они в Oracle, как создать временную таблицу из процедуры или пакета PL/SQL, поработать с ней а затем удалить. Как?
    Ответ. В Oracle для этих целей используются временные таблицы, но их поведение и применение отличается от других SQL-серверов. FAQ: Временные таблицы

    9. Вопрос. Как в PL/SQL работать с массивами?
    Ответ. Под массивами могут подразумеваться PL/SQL-таблицы или объектные типы-таблицы.
    Oracle® Database PL/SQL User''s Guide and Reference 10g Release 2
    5. Using PL/SQL Collections and Records
    //http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collections.htm#i26701

    10. Вопрос. Как проверить, что строка символов является числом?
    Ответ. Отсечение цифр от букв....., Сортировка строки как числа, Можно ли выбрать только те значения, которые являются числами, Ошибка с To_Number.
  • Вопрос: Вопросы по технологиям InterSystems

    Коллеги, привет!

    Нам нужна ваша помощь:
    Собираем для конкурсов и тестов вопросы и ответы по технологиям InterSystems.

    Вопросы могут быть простые, средние и сложные.

    Пример простого вопроса:
    Напишите результат вычисления выражения ObjectScript 1+2*3:
    Ответ:
    9 *
    8
    7
    6

    Пример среднего вопроса:
    В данном примере вызова метода: set sc=oref.Square(length, width, .square) какой из параметров передаётся по ссылке?
    Ответ:
    length
    width
    square *
    ни одного

    Пример сложного вопроса:
    Что появится на экране после выполнения следующей последовательности команд:
    Ответ:
    set a="10 яблок", b="12 яблок" write a>b

    false
    0 *
    <COMMAND>

    Пришлите пожалуйста ваши вопросы

    Через неделю огласим список самых "плодовитых" авторов.
    Лучшего автора пригласим на Школу Инноваций бесплатно (или еще что-нибудь предложим хорошее и поближе по времени).

    Заранее большое спасибо!

    Блог InterSystems на Хабре
    Каталог статей по технологиям InterSystems
    Видеоканал InterSystems Russia
    Группа Isc Meetup в Facebook
    Группа InterSystems University в Вконтакте
    Твиттер InterSystems Russia
    Ответ:
    Шваров Евгений
    Alexey Maslov
    правда, слышал от коллег, что делать на школах седовласым мампсистам особо нечего, но может и приеду (это не вопрос, вопрос ушёл в форму).

    Ну не знаю) Во всяком случае хакатоны никто не навязывает, и то этот эксперимент касался только последнего вечера и следующего утра. А параллельно идут круглые столы, которые мы собираемся делать более организованными. Остальное - все как раньше: занятия, практика, обсуждения, природа, баня )


    Эх-х...Баня...
    Вопрос: Скопилась пара вопросов

    Добрый день, потихоньку копятся вопросы с которыми надо разбираться.

    1) У меня есть измерение с пользователями :

    Пользователь_ID Начал_Действие Регистрация и т.д.
    1 (null) 20150101 ...
    2 (null) 20150101 ...
    3 20150102 20150101 ...
    4 (null) 20150101 ...


    Я хочу посчитать сколько пользователей "Начали Действие" на определенную дату.

    Я могу создать меру с агг-функцией count non empty по ключу "Начал Действие", но я не могу привязать этот ключ к измерению дат.
    Т.к. ругается при процессинге на null'ы в данных.
    Как грамотно решить ситуацию ?


    2) Еще вопрос по last non-empty

    Сколько не перечитал всяких тем, так решения и не нашел.

    Ситуация:
    Создал distinct count меру "Кол-во Регистраций" на ключе "Пользователь_ID" и связал ее с измерением дат по полю "Регистрация", благо оно не бывает null.

    Теперь мы получили кол-во регистраций по датам:

    Дата Кол-во Регистраций
    01.05.2015 5
    02.05.2015 7
    03.05.2015 15
    04.05.2015 4


    Все красиво и хорошо, а теперь добавим меру "Потратили Денег" и отфильтруем чтобы только те кто зарегистрировались 01.05.2015:

    Дата Кол-во Регистраций Потратили Денег
    01.05.2015 5 1000
    02.05.2015 (null) 2000
    03.05.2015 (null) 1333
    04.05.2015 (null) 3222


    Вопрос:
    Как создать такой Calculated Member, чтобы при фильтрации пользователей по дате регистрации получалось:

    Дата Кол-во Регистраций Потратили Денег
    01.05.2015 5 1000
    02.05.2015 5 2000
    03.05.2015 5 1333
    04.05.2015 5 3222


    Т.е. чтобы всегда показывалось значение на выбранную дату.

    Надеюсь все объяснил понятно, поделитесь пожалуйста опытом люди добрые.
    Ответ: WarAnt,

    Я ведь так и сделал и описал это подробно в ответе Старику.
    И засада вся теперь в том, что фильтруя даты регистрации по отдельному измерению я получаю:

    Фильтр по второму измерению дат(по регистрациям)
    01.05.2015


    Обычное измерение дат Кол-во Регистраций Трата Бабла
    01.05.2015 333 40000
    02.05.2015 (null) 30000
    03.05.2015 (null) 20000
    04.05.2015 (null) 10000



    Babona,

    По поводу Scope - надо покурить, я его не разу не трогал.
    Но вроде бы мне не в будущее надо тянуть, а заполнить последним не нулевым существующую дату.
    Пробовал через tail, еще есть варианты с рекурсией - но они на MDX описаны, а именно под CM не нашел или не работало.


    Остается вопрос:

    3) И еще вопрос возник:
    Сделал куб невидимым, но его перспективы остаются видимыми. Можно ли их тоже скрыть ? Не нашел такого свойства у них, и не загуглилось ничего.
    Вопрос: Вопросы на собеседованиях для сеньоров

    Пельмени уже создавал тему "Вопросы на собеседованиях для юниоров".
    Собственно, я созрел для создания этой темы "Вопросы на собеседованиях для сеньоров" - кто что подскажет?

    Кто поделится вопросами и ответами, и что почитать по теме каждого вопроса?
    Ответ:
    Владислав Колосов
    уровень зарплаты никак не зависит ни от квалификации, ни от качества работы. Так что Вы правы насчет джуниора.
    В целом верно, хотя это уже тема другой беседы
    Но данном случае это не имеет значения, я же писал про другое, про зависимость квалификации и качества работы от зарплаты, ИМХО в контектсе вопроса ТС именно это важно.
    Вопрос: Производительность SQL сервера ВОПРОС!

    Здравствуйте.
    На новом месте работы поставили задачу разобраться с производительностью сервера SQL. Сказали, что пользователи жалуются, «тормозит, плохо работает». Я сам в БД не работаю, запросы не создаю и т.д., все со слов.
    Исходные данные на момент написания:

    Сервер:

    Win server 2008R2 x64 – 125 Gb ОЗУ – Xeon E5 4640 x2
    MS SQL 2012 (количество баз – 30, размер всего 900 Гб)

    Информация по БД основная, без секундных метрик и данных о нагрузке в единицу времени:

    Data Base Pages – 11 134 865
    Buffer Cache Hit Ratio – 100 %
    Target Pages – 261 914 624
    Cache objects – 96 346
    Cache pages – 885 283

    Для мониторинга обстановки основные показатели интегрированы в сервер мониторинга и выводы следующие:
    Дисковая подсистема и процессорный пул не сильно нагружаются. То есть тех ресурсов что есть вполне хватает. А вот с оперативной памятью вопрос. Для SQL выделено 100 Gb, он «съел» их полностью. Причем было выделено 80, добавили +20 за неделю он их «прикончил».
    В связи с этим вопрос, какой оптимальный объем ОЗУ (ориентировочно) мне нужен в данной ситуации (я в курсе, что это очень грубо, без анализа количества запросов и других параметров работы пользователей с БД) и что посмотреть в первую очередь для некой оптимизации БД, без глобальных изменений.
    Буду рад ответить на уточняющие вопросы. Спасибо большое заранее.
    Ответ:
    Гавриленко Сергей Алексеевич
    dezhnevo
    нужные ресурсы, типа этого и далее внутри на ссылки MSDN
    Когда вы осознаете, что все, что там написано вроде как и по делу, но работает, когда база нормально сдалена изначально, и вам далеко не факт, что поможет, то велкам бэк.
    А мне очень понравился самый первый комментарий с огромным количеством вопросов к авторам этой статьи, который заканчивается словами:
    Я выдохся. Вопросы еще есть, а статья ни о чем.
    Вопрос: Вопрос по временным таблицам.

    Возник вопрос, что лучше использовать временную таблицу, либо реальную таблицу.
    Задача такая, когда пользователь открывает документ то данные должны поступить в некую промежуточную таблицу. Если использовать ту же таблицу то придется использовать некий ID сессии чтобы различать открытые документы пользователей и при больших объемах данных изменения в документе будут более затратными.
    Так вот, идеи такие:
    1)входе в программу создать временную таблицу ## и в нее по мере необходимости помещать открытые документы. При выходе из программы сессия рвется и соответсвтенно данные удаляются.
    2)создать 1 реальную таблицу на всех пользователей и туда помещать документы открытые. Там появится тогда номер сеанса чтобы каждый пользователь видел только свои документы. + Есть момент что если пользователь вышел из программы во время работы с документом то данные в таблице остануться и со временем там накопится куча ненужного хлама.
    3) при входе в программу создавать таблицу например Docs+'ID сессии'. Пользователь работает в ней, а при выходе из программы то создать триггер который будет удалять данные таблицы.

    Как считаете, какой метод более рационален?
    Ответ:
    Smoke999
    А не получить кучу не нужной информации.

    Если ваш уровень знаний низок, то это не значит, что информация ненужная.

    Smoke999
    Вроде здесь форум, где можно задать вопрос и получить какой-то ответ.

    Вот вы и получили ответы. Если они вам не нравяться, то дело в вопросе наверное

    Smoke999
    я просто не понимаю зачем отвечать на вопросы которые не задают.

    Потому что "Вроде здесь форум". Здесь ведут диалог, а не монолог.
    Вопрос: Академ вопрос

    Всем добрый вечер.

    Недавно отвечал на тесты, для соискателей.
    Был там вот такой вопрос:

    Есть таблица T, с произвольным набором значений в поле id, как одним select получить крайние значения от заданного значения id на входе.
    Пример:
    T.id =
    12
    34
    76
    89
    1234
    1254
    6789
    3456

    На вход для select подаем id=1254, на выходе должны быть два значения 1234 и 6789

    Я предоставил следующий ответ

    Select MIN(id) f0 from T Where id>1254
    UNION ALL
    Select MAX(id) f0 from Where id<1254

    Судя по отзыву ответ посчитали неправильным.

    Вопрос из любопытства: как можно ответить на данный вопрос?

    Заранее спасибо
    Ответ:
    Winnipuh
    MasterZiv
    Select MIN(id), MAX(id) from T Where id in (12,34,76,89,1234,1254,6789,3456)
    

    "крайние значения от заданного значения id на входе." ?

    да все ок,
    ведь крайний -- это или находящийся с краю, или экстремальный.
    именно по этой причине у любого списка значений "краев" всегда 2 (могут и совпадать).
    но т.к. нам тут втирают, что упорядоченность отсутствует, о краях говорить не приходится.
    остаются экстремумы -- min и max.
    ---
    супер-составители вопросов сперва должы с русским разобраться, если хотят, чтоб их понимали.
    еще раз: то, что они хотят -- это "соседние" значения.
    и для определения соседства необходимо определение порядка.
    нет порядка -- нет соседства. все!
    Вопрос: Вопрос про повторяющиеся записи

    USE worktime
    DECLARE @from datetime
    DECLARE @to datetime
    DECLARE @CheckNumber datetime
    SELECT @from='2016-06-22 00:00:01.000',@to='2016-06-22 23:59:59.000',@CheckNumber=215
    SELECT distinct
    p.[Name],
    me.EventTime ,
    me.CheckNumber ,
    me.TabelNumber ,
    case when cc.isOut=0 THEN 'Вход' ELSE 'Выход'END,
    cp.NameCheckPoint,
    is1.[Description]
    FROM _MoveEvent me WITH (NOLOCK)
    INNER JOIN _Person p WITH (NOLOCK) ON p.TabelNumber=me.TabelNumber
    INNER JOIN _Regulation r WITH (NOLOCK) ON r.UIDStaff=p.UIDStaff and r.StartDate<=@from
    INNER JOIN _CheckPointContent cc WITH (NOLOCK) ON me.CheckNumber=cc.NumberCheck
    INNER JOIN _CheckPoint cp WITH (NOLOCK) ON cc.IDCheckPoint=cp.ID
    INNER JOIN _GroupPointContent gpc WITH (NOLOCK) ON gpc.NameCheckPoint=cp.NameCheckPoint
    INNER JOIN _InterbaseSource is1 WITH (NOLOCK) ON cp.IDInterbaseSource=is1.ID AND me.IDInterbaseSource=is1.id
    WHERE
    me.EventTime BETWEEN @from AND @to
    --AND me.CheckNumber in (9, 18, 19, 20, 31, 42, 53, 64, 75, 79, 86, 92, 97, 105, 118, 131, 144, 164, 177, 270, 278, 281, 289, 313, 314, 324, 331, 342, 360, 371, 412, 423, 440, 465, 468, 476, 633, 644, 681, 692, 703, 816, 827, 1059, 1070, 1332, 1438, 1449, 1489, 1500, 1636, 1647, 1677, 1688, 1795, 1806, 1817, 1828, 1839, 1850, 1861, 1973, 1988, 1999, 2066, 2077, 2087, 2091, 2098, 2102, 2119, 2130, 2141, 2152, 2234, 2289, 2300, 2355, 2366, 2471, 2482, 2498, 2773, 2784, 3028, 3039, 3076, 3087, 3190, 3201, 3375, 3397, 3664, 3675, 3827, 4148, 4159, 4253, 4264, 4276, 4287, 4298, 4309, 4320, 4331, 4342, 4353, 4364, 4375, 4386, 4397, 4408, 4419, 4420, 4430, 4431, 4441, 4452, 4463, 4474, 4485, 4496, 4507, 4518, 4529, 4562, 4573, 4584, 4595, 4606, 4617, 4628, 4639, 4672, 4694, 4716, 4727, 4738, 4749, 4705, 4683, 4782, 4793, 5676, 5687, 5698, 5709, 5720, 5731, 5742, 5753, 7859, 7826, 7837, 9785, 9796, 10317, 10328, 10374, 10385, 10894, 10905, 12507, 12518, 13024, 13035, 13046, 13057)
    --AND me.CheckNumber in (5817)
    --AND p.[Path] LIKE '\ВВ\%'
    and me.TabelNumber in (1020576)


    Такой вопрос как сделать так чтобы Вход был в одной колонке а Выход в другой
    Такой еще вопрос как сделать чтобы в списке был только первый вход и последний выход сотрудника за день, а не все его движения за целый день

    К сообщению приложен файл. Размер - 129Kb
    Ответ:
    rust1983
    USE worktime
    DECLARE @from datetime
    DECLARE @to datetime
    DECLARE @CheckNumber datetime
    SELECT @from='2016-06-22 00:00:01.000',@to='2016-06-22 23:59:59.000',@CheckNumber=215
    SELECT distinct
    p.[Name],
    me.EventTime ,
    me.CheckNumber ,
    me.TabelNumber ,
    case when cc.isOut=0 THEN 'Вход' ELSE 'Выход'END,
    cp.NameCheckPoint,
    is1.[Description]
    FROM _MoveEvent me WITH (NOLOCK)
    INNER JOIN _Person p WITH (NOLOCK) ON p.TabelNumber=me.TabelNumber
    INNER JOIN _Regulation r WITH (NOLOCK) ON r.UIDStaff=p.UIDStaff and r.StartDate<=@from
    INNER JOIN _CheckPointContent cc WITH (NOLOCK) ON me.CheckNumber=cc.NumberCheck
    INNER JOIN _CheckPoint cp WITH (NOLOCK) ON cc.IDCheckPoint=cp.ID
    INNER JOIN _GroupPointContent gpc WITH (NOLOCK) ON gpc.NameCheckPoint=cp.NameCheckPoint
    INNER JOIN _InterbaseSource is1 WITH (NOLOCK) ON cp.IDInterbaseSource=is1.ID AND me.IDInterbaseSource=is1.id
    WHERE
    me.EventTime BETWEEN @from AND @to
    --AND me.CheckNumber in (9, 18, 19, 20, 31, 42, 53, 64, 75, 79, 86, 92, 97, 105, 118, 131, 144, 164, 177, 270, 278, 281, 289, 313, 314, 324, 331, 342, 360, 371, 412, 423, 440, 465, 468, 476, 633, 644, 681, 692, 703, 816, 827, 1059, 1070, 1332, 1438, 1449, 1489, 1500, 1636, 1647, 1677, 1688, 1795, 1806, 1817, 1828, 1839, 1850, 1861, 1973, 1988, 1999, 2066, 2077, 2087, 2091, 2098, 2102, 2119, 2130, 2141, 2152, 2234, 2289, 2300, 2355, 2366, 2471, 2482, 2498, 2773, 2784, 3028, 3039, 3076, 3087, 3190, 3201, 3375, 3397, 3664, 3675, 3827, 4148, 4159, 4253, 4264, 4276, 4287, 4298, 4309, 4320, 4331, 4342, 4353, 4364, 4375, 4386, 4397, 4408, 4419, 4420, 4430, 4431, 4441, 4452, 4463, 4474, 4485, 4496, 4507, 4518, 4529, 4562, 4573, 4584, 4595, 4606, 4617, 4628, 4639, 4672, 4694, 4716, 4727, 4738, 4749, 4705, 4683, 4782, 4793, 5676, 5687, 5698, 5709, 5720, 5731, 5742, 5753, 7859, 7826, 7837, 9785, 9796, 10317, 10328, 10374, 10385, 10894, 10905, 12507, 12518, 13024, 13035, 13046, 13057)
    --AND me.CheckNumber in (5817)
    --AND p.[Path] LIKE '\ВВ\%'
    and me.TabelNumber in (1020576)


    Такой вопрос как сделать так чтобы Вход был в одной колонке а Выход в другой
    Такой еще вопрос как сделать чтобы в списке был только первый вход и последний выход сотрудника за день, а не все его движения за целый день


    Да что вы привезались к SQL запросам.
    Ну не могут они делать некоторые вещи (разве только через одно место)
    Создайте Рекорд сет, а там творите что угодно.
    Чё вы привезались к SQL ну не может он делать некоторые вещи.
    И вообще имея "толстого клиента" лучьше делать на нем.
    Уже замучали своими SQL портянками.
    С уважением.