Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Нужна помошь! / 21 сообщений из 21, страница 1 из 1
28.01.2010, 10:09
    #36435314
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
Народ нужна помощь, ситуация следующая:
Есть данные в файле Excell
М453 ИВАНОВ 04.01.2010 7:09:39 Хозяйственный отдел 108 / 4701 ТОКАРЬ вход
М453 ИВАНОВ 04.01.2010 17:09:39 Хозяйственный отдел 108 / 4701 ТОКАРЬ выход
М452 ПЕТРОВ 04.01.2010 7:10:39 Хозяйственный отдел 108 / 4702 ТОКАРЬ вход
М454 СИДОРОВ 04.01.2010 7:09:39 Хозяйственный отдел 108 / 4703 ТОКАРЬ вход
М455 СОЛДАТОВ 04.01.2010 7:09:39 Хозяйственный отдел 108 / 4704 ТОКАРЬ вход
М452 ПЕТРОВ 04.01.2010 17:09:39 Хозяйственный отдел 108 / 4702 ТОКАРЬ выход
загоняю в таблицу
Код: plaintext
1.
CREATE TABLE [JURNAL] ([id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[T_TABNUMBER] TEXT NOT NULL, [T_FIO] TEXT NOT NULL, [T_DATE] DATE  NOT NULL, [T_TIME_IN] TIME NOT NULL, [T_TIME_OUT] TIME NOT NULL, [T_ORGUNIT] TEXT NOT NULL, [T_CARD_SN] TEXT, [T_IN_OUT] TEXT, [T_JOBSTATE] TEXT  NULL)
проблема в том что никак не могу понять как сделать чтобы при выборке данных получилось следующее
М453 ИВАНОВ 04.01.2010 7:09:39 04.01.2010 17:09:39 Хозяйственный отдел 108 / 4701 ТОКАРЬ
то есть в одной строке вход и выход сотрудника
...
Рейтинг: 0 / 0
28.01.2010, 18:41
    #36437126
Нужна помошь!
Dime777,

для токаря Иванова что в поле
Код: plaintext
[T_TIME_IN] TIME NOT NULL
если T_IN_OUT='выход' ?
...
Рейтинг: 0 / 0
28.01.2010, 19:19
    #36437188
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
Тебе надо объединять таблицу саму с собой. Объединять по табельному номеру и
для даты выхода брать максимальную из меньших по сравнению с датой входа дату
выхода. Примерно так ...

Проблема написать ?
...
Рейтинг: 0 / 0
29.01.2010, 10:30
    #36437875
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
Гость_в_Горле
для токаря Иванова что в поле
Код: plaintext
[T_TIME_IN] TIME NOT NULL
если T_IN_OUT='выход' ?
В поле "0"

Dmitry Arefiev
Тебе надо объединять таблицу саму с собой. Объединять по табельному номеру и
для даты выхода брать максимальную из меньших по сравнению с датой входа дату
выхода. Примерно так ...

Проблема написать ?

Вот как раз с этим и проблема, не могу понять как составить запрос.
Уже разбил на 3 таблицы 1 данные по сотрудникам, 2 карта-номер, дата, время_входа. 3-карта-номер, дата, время_выхода. JOIN LEFT присоединяет 2 таблицу, из 3 ничего не берет. (Правда и запрос кривой "select T_PERSONAL join left T_IN join left T_OUT on T_PERSONAL.T_CARD_SN=T_IN.T_CARD_SN AND T_PERSONAL.T_CARD_SN=T_OUT.T_CARD_SN")

но всетаки хочется чтобы все данне были в одной таблице а не в трех

В SQL я новичок так что сильно не ругаться :(
...
Рейтинг: 0 / 0
29.01.2010, 17:11
    #36439344
Нужна помошь!
Dime777,
поробуй такое
Код: plaintext
1.
2.
3.
4.
select a.T_TABNUMBER, a.T_FIO, a.T_DATE, a.T_TIME_IN, 
       b.T_DATE, b.T_TIME_OUT, a.T_ORGUNIT, a.T_CARD_SN, a.T_JOBSTATE
from (select * from JURNAL where T_IN_OUT='вход') a 
   left join (select * from JURNAL where T_IN_OUT='выход') b 
   on (a.T_TABNUMBER=b.T_TABNUMBER and a.T_DATE=b.T_DATE)

(?) зачем тебе в записи два поля T_TIME_IN и b.T_TIME_OUT если используешь, по сути, только одно из них (при входе только T_TIME_IN, при выходе только b.T_TIME_OUT), а потом потеешь с соединением таблиц.
...
Рейтинг: 0 / 0
12.02.2010, 09:39
    #36464867
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
Гость_в_Горле,
к сожалению Ваш пример не работает :( Есть ли еще идеи?
...
Рейтинг: 0 / 0
12.02.2010, 13:43
    #36465739
Нужна помошь!
Dime777Гость_в_Горле,
к сожалению Ваш пример не работает :( Есть ли еще идеи?

как именно "не работает"?
1. выдает ошибку,
2. отрабатывает,но не выдает записей,
3. выдает "не все" записи
4. Ваш вариант интерпретации "не работает"
...
Рейтинг: 0 / 0
12.02.2010, 13:48
    #36465752
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
2. отрабатывает,но не выдает записей,
...
Рейтинг: 0 / 0
12.02.2010, 13:56
    #36465784
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
может можно как-то сделать по другому

структура таблицы такая
CREATE TABLE [JURNAL]
([id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[T_TABNUMBER] TEXT NOT NULL, //табельный
[T_FIO] TEXT NOT NULL, //фио
[T_DATE] TEXT NOT NULL, // дата
[T_TIME] TEXT NOT NULL, //вркмя
[T_ORGUNIT] TEXT NOT NULL, //подразделение
[T_CARD_SN] TEXT, //номер карты
[T_IN_OUT] TEXT, // вход или выход
[T_JOBSTATE] TEXT NULL) //должность
...
Рейтинг: 0 / 0
12.02.2010, 14:04
    #36465830
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
нужно чтобы было

[T_TABNUMBER] [T_FIO] [T_DATE] [T_TIME(входа)] [T_DATE] [T_TIME(выхода)] [T_ORGUNIT] [T_CARD_SN] [T_IN_OUT] [T_JOBSTATE]
...
Рейтинг: 0 / 0
12.02.2010, 14:07
    #36465842
Нужна помошь!
Dime777,

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

а что у тебя выдает такой запрос:
Код: plaintext
select count(*) from JURNAL where T_IN_OUT='вход';
...
Рейтинг: 0 / 0
12.02.2010, 16:48
    #36466517
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
Разобрался, все заработало. Нужно было написать 'Выход' вместо 'выход' :) или like использовать

Гость_в_Горле СПАСИБО!
...
Рейтинг: 0 / 0
12.02.2010, 18:38
    #36466799
Нужна помошь!
Dime777Разобрался, все заработало. Нужно было написать 'Выход' вместо 'выход' :) или like использовать

Гость_в_Горле СПАСИБО!

... или отказаться от строкового типа в полях-флагах, заменив на Int.
...
Рейтинг: 0 / 0
13.02.2010, 18:10
    #36467723
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
согласен, и поля с датой и временем нужно сделать datetime
...
Рейтинг: 0 / 0
15.02.2010, 12:27
    #36469472
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
возник еще один вопрос.
ситуация такая что сотрудник проходин по карте и иногда время входа задваивается, т.е.


М453 ИВАНОВ 04.01.2010 7:09:39 Хозяйственный отдел 108 / 4701 ТОКАРЬ вход
М453 ИВАНОВ 04.01.2010 7:09:43 Хозяйственный отдел 108 / 4701 ТОКАРЬ вход

М453 ИВАНОВ 04.01.2010 17:09:39 Хозяйственный отдел 108 / 4701 ТОКАРЬ выход
М452 ПЕТРОВ 04.01.2010 7:10:39 Хозяйственный отдел 108 / 4702 ТОКАРЬ вход
М454 СИДОРОВ 04.01.2010 7:09:39 Хозяйственный отдел 108 / 4703 ТОКАРЬ вход
М455 СОЛДАТОВ 04.01.2010 7:09:39 Хозяйственный отдел 108 / 4704 ТОКАРЬ вход
М452 ПЕТРОВ 04.01.2010 17:09:39 Хозяйственный отдел 108 / 4702 ТОКАРЬ выход

какбы составить запрос чтобы убирать эти задвоения, чтобы за сутки был 1 вход и один выход
...
Рейтинг: 0 / 0
15.02.2010, 12:39
    #36469514
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
Так это проблема в прикладухе:

- Почему записи задваиваются ?
- Почему не висит триггер с обеспечением соответствующего бизнес-правила, что если человек не вышел, то он не может войти еще раз ? И т.д.
- Если убирать, то какая из двух (или более ?) записей правильная, а какая дубликат ?
- И как может быть только один вход в сутки и один выход ? У вас что, армия или тюряга или подводная лодка ? :)
...
Рейтинг: 0 / 0
15.02.2010, 13:10
    #36469617
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
У нас завод :) а верное это последний вход и выход, т.е.

М453 ИВАНОВ 04.01.2010 7:09:39 Хозяйственный отдел 108 / 4701 ТОКАРЬ вход <-вот это убрать
М453 ИВАНОВ 04.01.2010 7:09:43 Хозяйственный отдел 108 / 4701 ТОКАРЬ вход
...
Рейтинг: 0 / 0
15.02.2010, 23:43
    #36471304
Нужна помошь!
Dime777,

(!) не проверял , - не на чем :(
"Лишние" строки ("задвоением" язык назвать не поворачивается)
Код: plaintext
1.
2.
3.
select distinct a.*
from JURNAL a join JURNAL b
  on a.T_TABNUMBER=b.T_TABNUMBER and a.T_DATE=b.T_DATE 
     and a.T_IN_OUT=b.T_IN_OUT and (a.T_TIME_IN<b.TIME_IN or a.TIME_OUT<b.TIME_OUT);
...
Рейтинг: 0 / 0
15.02.2010, 23:48
    #36471315
Нужна помошь!
Гость_в_ГорлеDime777,

(!) не проверял , - не на чем :(
"Лишние" строки ("задвоением" язык назвать не поворачивается)
Код: plaintext
1.
2.
3.
select distinct a.*
from JURNAL a join JURNAL b
  on a.T_TABNUMBER=b.T_TABNUMBER and a.T_DATE=b.T_DATE 
     and a.T_IN_OUT=b.T_IN_OUT and (a.T_TIME_IN<b.TIME_IN or a.TIME_OUT<b.TIME_OUT);

Ахтунг! Опечатко! Надо:
Код: plaintext
and a.T_IN_OUT=b.T_IN_OUT and (a.T_TIME_IN<b.TIME_IN or a.T_TIME_OUT<b.T_TIME_OUT);

ЗЫ: прилушайтесь к замечаниям тов. Dmitry Arefiev насчет проблем(ы) в прикладухе.
...
Рейтинг: 0 / 0
15.02.2010, 23:53
    #36471323
Нужна помошь!
В предидущем посте также опечатко . (как стыыыыдноооо)
Боюсь даже исправлять, но НАДО:
Код: plaintext
1.
2.
3.
4.
select distinct a.*
from JURNAL a join JURNAL b
  on a.T_TABNUMBER=b.T_TABNUMBER and a.T_DATE=b.T_DATE 
     and a.T_IN_OUT=b.T_IN_OUT 
     and (a.T_TIME_IN<b.T_TIME_IN or a.T_TIME_OUT<b.T_TIME_OUT);

Говорила мне мама: "Сынок, не мешай водку с порвейном"...
...
Рейтинг: 0 / 0
16.02.2010, 07:33
    #36471561
Dime777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помошь!
Спасибо за помощь, но всетаки решил избавиться от лишних строк в "прикладухе", а не средствами SQL
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Нужна помошь! / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]