열사빵빵이
595
2020-06-09 14:11:20
157
5601

파이썬 질문있어용 알려주세욥..ㅠㅠㅠ


 if문으로 24시간동안 DB에있는 데이터값이 0이 연속으로 24개있을때를 코드로 어떻게 짜야할까요?ㅠㅠㅠ.ㅠ..도와주십쇼..ㅠㅠㅠㅠㅠ

0
  • 답변 157

  • 열사빵빵이
    595
    2020-06-09 14:11:50

    데이터는 불러왔는데 어떻게  코드를 짜야할지를 모르겠어요..ㅠㅠ

  • 드코
    3k
    2020-06-09 14:16:57

    if( time=24 and DB  and 0 = 24 ){

    OK

    }

    지금 알려주신 정보만으로 짜봤습니다.

  • 열사빵빵이
    595
    2020-06-09 14:28:32

     드코님 

    anomalyDB = 0

    for i in range(0,9000) :

        if (0 in df['use_value'] == df['mdate'] == 24) :

                anomalyDB = 0 

        else:

                anomalyDB = 1

    print("수도사용량 없이 12시간 동안 지속된 횟수 : %d" %anomalyDB)

    어떻게 고치면 될까요?

    24시간이 연속으로 있을땐 0

    없을땐 1로 짜고 싶어요 use_value는 칼럼명이구요

  • 드코
    3k
    2020-06-09 14:37:41

    잘 짜신거 아닌가여 어디가 문제죠??

  • 드코
    3k
    2020-06-09 14:42:03

    anomalyDB = 0     // 0또는 1 반환값을 넣을 변수

    for i in range(0,9000) :  // 데이터 범위

        if (0 in df['use_value'] == df['mdate'] == 24) :  // 데이터가 24일 경우

                anomalyDB = 0   // 0을 반환

        else:

                anomalyDB = 1  // 1을 반환

  • 열사빵빵이
    595
    2020-06-09 14:58:50

    값이 나오질 않아요.... 데이터가 약 9000개 정도되는데 24시간이 하루니깐 하루기준으로 하면 약 300개의 값이 0,1,0,1 리스트로 보고싶은데 그렇게 안나와요...ㅠㅠㅠ 모든 리스트가 안나와서 문제에욥..ㅠㅠ

  • 열사빵빵이
    595
    2020-06-09 15:00:46 작성 2020-06-09 15:01:34 수정됨

    이렇게 띡 하나 나오고 끝나버려요..ㅠ.ㅠㅠㅠㅠㅠㅠㅠ

  • 드코
    3k
    2020-06-09 15:09:23

    그럼 데이터를 불러오는 sql 쿼리문에서 

    where 데이터 등록일 between now() and now()-1  이런식으로 검색 조건을 현재날짜에서 -1 해서 하루치 24시간을 정하여 하루치만 select 되도록 하고

    요점은 1번데이터와 2번데이터 3번 .... 등등 use_value의 값이 연속적으로 '0'으로 데이터가 24개가 나올 경우 해당데이터들은 0이라틑 코드를 부여하고  '0'인 아닌데이터가 나올경우는 '1'이라는 코드를 부여해서 리스트로 보고 싶으신거죠?


    use_value연속데이터 여부
    01
    01
    11
    01

    이럴 경우는 0이 연속으로 나오다가 3번째 1이 나왔으니 연속데이터가 아니므로 1을 부여 하고


    use_value연속데이터 여부
    00
    00
    00

    .

    .

    .

    00
    00
    00

    24번연속 데이터가 다 0일경우만  코드 0을 부여 하고 싶으신거죠?

  • 열사빵빵이
    595
    2020-06-09 15:12:32

    네 맞습니다. 그러면 어떻게 코드를 짜야하나요?ㅠㅠㅠ

  • 드코
    3k
    2020-06-09 15:22:29 작성 2020-06-09 15:23:28 수정됨

    우선은 해당 쿼리 내용에서 조건 문 부분에 

    and 데이터등록일 between now() and 현재날짜-1 해서  데이터의 하루치만 조회가 되도록 하죠

    그리고 select *보다는 사용하는 컬럼들 명을 직접 명시를 해주도록 하죠.


    now()는 현재 날짜를 불러오는 함수고 날짜에서 -1 해서 하루치 빼는 부분들은 검색이 필요합니다.

  • 열사빵빵이
    595
    2020-06-09 15:23:28

    불러올때 쓴 데이터 입니다. 어떻게 하면 될가요?

  • 열사빵빵이
    595
    2020-06-09 15:24:18
    use_value < 100 뒤에 and를 붙인다음에 해야하나용...? 음..제가 이해를 잘못해서..ㅠㅠ
  • 열사빵빵이
    595
    2020-06-09 15:24:54

    쿼리 짜는 능력은 제로라..ㅠㅠㅠㅠㅠㅠ

  • 드코
    3k
    2020-06-09 15:32:02

    1. 해당 테이블에 mdate 이 컬럼이 데이터를 등록한 날짜가 맞는지?

    2. 날짜가 맞다면 20200101 , 2020-01-01 등 어떤 포맷으로 사용이 되고 있는지 확인

    3. 현재날짜를 불러오는 함수 now()와  mdate의 날짜 표현방식을 동일하게 맞추기 (date_format()  함수이용)

    4. and mdate between now() and (now()-1) 날짜 빼기  ( date_add() 함수이용)

    ( between은  20200101 and 20200202 이런식으로 해당 날짜의 범위를 지정 하게 해주는 구문 )

    mdate 가  now() 현재 부터 ~  now()-1 어제까지 해서 24시간의 조건을 주기 위함

    5. select * 부분에서 *를 지우고 실제 사용할 컬럼명만 나열하기  


    일단은 이순서대로 진행을 해보셔야 될거같습니다

    select 컬럼

    from 테이블

    where 조건

    and 추가조건

    group by 데이터 그룹맺기

    having 그룹 맺고 조건 주기

    order by 데이터 정렬

    기본적인 sql구문순서 입니다.

  • 열사빵빵이
    595
    2020-06-09 15:40:00


    데이터자체는 이런형태로 되어있구요.......으..... 말씀해주셔도 어떻게 해야할지 감이 안잡히네요..ㅠㅠㅠㅠㅠㅠㅠㅠ 코딩으로는 뽑아낼수 없는 형태인가요?

  • 열사빵빵이
    595
    2020-06-09 15:40:51

    2018-12월 31일부터 2019-12월31일까지 있는 데이터입니다.

  • 드코
    3k
    2020-06-09 15:47:01

    그냥 하지 마시라고 말씀드리고 싶지만 끝까지 해보죠


    mdate와 udate의 차이가 뭔가요

  • 열사빵빵이
    595
    2020-06-09 15:47:58 작성 2020-06-09 15:50:57 수정됨

    mdate는 각 한시간마다 체크되는 부분이구 udate는 데이터가 입력된 시간입니다.


    시간 뺏는것 같아 죄송합니다....ㅠㅠㅠ 


    결과적으로는 mdate를 이용해서 24시간동안 use_value가 0이 될경우 

    db에 결과값으로 1을 저장하는 그런 프로그램을 짜고싶습니다...ㅠㅠ

  • 드코
    3k
    2020-06-09 15:57:50

    그러면 다시 정리를 해보면

    데이터 작성 후 udate에 작성 일자가 박히고

    mdate가 한시간마다 update되고 있고  update하면서 use_value가 0인지 아닌지에 따라 상태가 정상인지 아닌지 결과가 나오는 건가


    그렇다면 첫데이터가 2018-01-01에 작성이 되었다면 (udate) 그 후 24시간이내에 들어오는 데이터가 0이 연달아 24개 가들어온거만 체크하는건가요?

    만약 2018-01-01에 데이터 작성 후 그후로 23개의 데이터만 들어왔다면 use_value가 다 0이여도 1을 반환해야 되나요?


  • 드코
    3k
    2020-06-09 15:59:24

    제가 처음이 이해했던거는 현재시간을 기준으로 24시간 이전인 데이터만 0인지 1인지 검사하는 대상이 되는건줄 알았는데


    기준이 작성된 데이터가 기준인건지 명확하지가 않아요

  • 드코
    3k
    2020-06-09 16:01:37

    현재 시간이 기준이 아니라면

    update가 

    2018-12-31 ~ 2019-01-01  : 24개 연속 use_value가 0개인개 있는지 검사

    2019-01-01 ~ 2019-01-02  : 24개 연속 use_value가 0개인개 있는지 검사

    2019-01-02 ~ 2019-01-03  : 24개 연속 use_value가 0개인개 있는지 검사


    이러게 각 데이터 날짜별로 하루치씩 검사를 해야 되는건가요

  • 열사빵빵이
    595
    2020-06-09 16:03:32

    음 정확히 말씀 드리자면 udate는 필요가 없는 부분이구욥!

    mdate는 한시간에 한번씩 체크가 되서 use_value 사용값이 생깁니다

    1시간 데이터가 0일경우는 상관 없는 부분이구요!

    24시간 즉 24개의 데이터가 연속적으로 0으로 값이 입력되 었을때 반환값으로 1 이 되어야 합니다

    음 하루치로 측정되기때문에 무조건적으로 24개의 데이터가 들어올거구요. 

    일단 목표는 24개의 데이터가 연속적으로 0이 들어왔을경우 반환값으로 1을 db에 넣는 형태입니다.

  • 열사빵빵이
    595
    2020-06-09 16:04:43 작성 2020-06-09 16:09:50 수정됨

    네 update가 아닌 mdate가 24개가 use_value가 0인지를 검사하는 내용입니다!

    즉 mdate가 이런형태로 되는거죠! 

    2018-12-31 ~ 2019-01-01  : 24개 연속 use_value가 0개인개 있는지 검사

    2019-01-01 ~ 2019-01-02  : 24개 연속 use_value가 0개인개 있는지 검사

    2019-01-02 ~ 2019-01-03  : 24개 연속 use_value가 0개인개 있는지 검사


  • 드코
    3k
    2020-06-09 16:10:39

    그럼 

    기존 A데이터가 1건이 있고 udate가 2018-01-01이고 mdate가 1시간 마다 업데이트가 됩니다.

    그렇다면 

    A데이터가 1건이고 udate의 날짜만 1시간마다 바뀌는데 새로운데이터는 언제 들어오는거죠?

  • 드코
    3k
    2020-06-09 16:12:40

    아그럼 각 일자별로 

    1월 1일에  각 시간별로 24개의 데이터가 있고


    2일에도 24개의데이터가 있고 각 일자별로는 24개의 시간만 다른 데이터가 있는건가요?

  • 드코
    3k
    2020-06-09 16:14:06

    그럼 결론 각 일자별 24건의 데이터 중 실패난 것 즉 use_value가 0이 아닌게 있으면 1 아니면 0 을 반환하면 되는건가요?

  • 드코
    3k
    2020-06-09 16:17:32 작성 2020-06-09 16:19:51 수정됨

    select left(mdate,10) as aDate, if(count(*)=24,'0','1') as aResult
    from 테이블

    where use_value=0

    group by aDate

    order by aDate asc

    이렇게 하면

    각일자별

    0이 아닌게 1개라도 있으면 1을 반환  24개 전부다 0이면 0을 반환합니다.


  • 열사빵빵이
    595
    2020-06-09 16:18:33

    네 결론적으론 맞습니다! 각 일별로 24개의 데이터가 있고 24건의 데이터모두가 0일경우에 반환값으로 0을주고 아닐경우는 1만 주면 되는 프로그램을 작성중에 있습니다.

  • 열사빵빵이
    595
    2020-06-09 16:19:16 작성 2020-06-09 16:24:10 수정됨

    그러면 파이썬 코드가 아닌 db로 짜야하나요?

    왜냐하면 파이썬으로 배치파일로 만들어서 자동화 시킬려고 하거든요.

    정확한 요지는 텐서플로우를 이용해 이상탐지를 하려고 하는 프로그램입니다,

  • 드코
    3k
    2020-06-09 16:24:34

    일단 DB로는 저렇게 조회 했을 시 

    일자반환코드
    2018-01-010
    2018-01-021
    2018-01-030

    이렇게 결과가 나올 겁니다.


    만약 이런 결과를 파이썬을 통하여 인터넷 브라우저 로 표출 하시려는게 목표이시면 이 방법이 가장 쉽고 빠르고


    해당 데이터를 다른 방법으로 표출을 하고 싶으신건가요? 

  • 열사빵빵이
    595
    2020-06-09 16:25:55

    네 맞습니다 DB조회 목적이 아닌 파이썬코딩을 통해 위에서 말씀드린 24개의 데이터가 모두 0일경우 1로 반환하여 데이터베이스에 집어 넣을 목적으로 프로그램을 짜고있습니다.

  • 드코
    3k
    2020-06-09 16:26:02

    일단 DB던 파이썬이던 어느 무엇을 가져다 사용해도 방법은 셀 수없을정도로 많이 있습니다.

    다만 자신이 아는방법, 알고있는 선에서 제작을 하고 만약 해당 결과보다 더 좋은 방법이 있다면 알아가는게 좋습니다.


    현재 저런 결과를 도출해서 사용하시려는거면 이방법이 가장 좋습니다.

  • 드코
    3k
    2020-06-09 16:27:11

    A테이블의 데이터를 저런 조회결과로 셀렉트해서 파이썬을 통하여 B테이블에 넣는 작업을 하시는 건가요?

  • 드코
    3k
    2020-06-09 16:29:05

    만약 위의 작업이라면 파이썬은 필요가 없고


    select insert문으로 조회된결과를 A테이블에서 B테이블로 한번에 넣는것도 가능하지만 이 select insert문으로 하나의 시스템에 넣으려면 파이썬을 통하여


    셀렉트됨과 동시에 insert를 시키는 select isnert구문으로 한방에 넣으시면 될거같습니다.

  • 열사빵빵이
    595
    2020-06-09 16:35:44 작성 2020-06-09 16:36:37 수정됨

    결과적으론 말씀하시는 부분이 맞습니다. 

    전체적인 프로그램을 짜는 이유는 텐서플로우와 케라스를 이용한 LSTM 이상탐지 구현이구요

    LSTM을 통한 이상탐지 이전에 0값이 24개가 되어있을경우 이미 이상데이터기 때문에 그것을 우선적으로

    DB에 집어 넣고 이후에 텐서플로우로 학습을 시켜서 use_value사용량이 너무 많거나 할경우 이상탐지를

    할 계획입니다. LSTM부분은 구현을 했지만 제가 말씀드린 파이썬을 통한  24개의 데이터가지고 우선적으로

    이상탐지를 하고 싶습니다.


    DB로 구현한다면 말씀하신데로 하는게 제일 좋은 방법인것 같습니다!  그렇게 된다면 파이썬도 필요없을것 같구요

  • 드코
    3k
    2020-06-09 16:42:27

    결과적으로 저 형태의 select 후 insert 하는 작업을 사람이 1~ 2번 수동으로 작업을 하면 끝나는 거면

    파이썬을 통한 프로그램을 만들 필요는 없고


    지속적으로 저런 작업이 이루어 져야하고 프로그래머가 아닌 일반사용자도 해당 작업을 해야 한다면

    파이썬을통하여 특정 이벤트 발생시 작동되는 하나의 시스템으로 만들던가

    DB, os, 파이썬등을 이용하여 스테쥴링을 통하여 하루에 한번씩 돌도록 만들던가  해야 될거 같습니다.

  • 열사빵빵이
    595
    2020-06-09 16:51:32
    네 맞습니다! 먼저 DB가 리눅스 서버에 설치가 되어있고 파이썬을 통해 그 코드를 구현하려는데 쉽지가 않네요......... 어떻게해야 24시간 동안 값이 0인경우를 코딩할 수 있을까요...ㅠㅠㅠㅠㅠㅠㅠ 
  • 드코
    3k
    2020-06-09 16:53:41

    다 끝난거 아니였나요  다시 처음으로 돌아간 느낌이..

  • 열사빵빵이
    595
    2020-06-09 16:57:21
    DB에서 수동으로 하는 작업이 아니라서 그렇습니다.ㅠㅠㅠㅠㅠ죄송합니다... 말씀하신데로 지속적으로 작업이 이루어져야하는 시스템구도입니다. 파이썬 코딩을 어떻게 해야하는지.....
  • 드코
    3k
    2020-06-09 17:00:48

    흠 일단 파이썬 코딩을 어떻게 해야하는지.. 라는 질문은 이 분야로 가실거면 더이상 하시면 안되는 질문이고 

    만약 이 질문을 계속 하게 되신다면 분야를 다른 쪽으로 가셔야 하는거구요


    어떻게 해야 되냐면요 

    일단 이 작업을 하기 위한 0부터 100까지 하나하나 차근차근 내가 생각한데로 작업을 하시다가 0에서 2까지 작업을 했는데 2에서 3으로 가는 방법이 내가생각한데로 안된다거나 어떻게 해야될지를 모른다면 그 0에서 2까지 작업한 내용을 알려주시고 2에서 3을 갈껀데 이렇게 했더니 안된다 어떻게 해야 되는지 문의를 하시는 방법으로 질문을 하시면 됩니다.

  • 드코
    3k
    2020-06-09 17:02:52

    지금 제가 느끼기에는 현재가 0인제 100으로 (완성품을 달라) 라는 느낌으로 느껴지거든요 모든 질문은 1~2 2~3 이런식으로 1단계씩만 질문을 하시면 됩니다.

  • 열사빵빵이
    595
    2020-06-09 17:07:25

    아 그렇게 느끼셨다면 죄송합니다.

    결론 적으로는 제가 짠 코딩

    anomalyDB = 0

    for i in range(0,9000) :

        if (0 in df['use_value'] == df['mdate'] == 24) :

                anomalyDB = 0 

        else:

                anomalyDB = 1

    print("수도사용량 없이 12시간 동안 지속된 횟수 : %d" %anomalyDB)

    어떤 부분이 잘못되었는지 궁금한 부분입니다... 죄송합니다.

  • 드코
    3k
    2020-06-09 17:14:51

    그럼 지금 현재 나와야 될 결과물이

    print("수도사용량 없이 12시간 동안 지속된 횟수 : %d" %anomalyDB)

    이게 최종 결과로 나오면 되는건가요


    이해가 안가는 부분이 지금 일자별  반환코드가 0인지 1인지 구하는거면은

    제가 올려드렸던 쿼리문으로 sql넣으시고

    결과를 list로 받아서


    게시물뿌려주듯

    print로 한줄한줄 일자와 반환코드가 나오면 되는거 아닌가요?


    24시간도 아니고 12시간동안 지속된횟수는 뭔가요 그리고 저 횟수라 함은 

    모든데이터인 2018-12-31 ~ 2019-12-31 까지의 반환코드(0,1)의 덧셈된 값인가요?

  • 열사빵빵이
    595
    2020-06-09 17:21:32

    아 print부분은 오타입니다. 24시간으로 정정했습니다. 죄송합니다. 

    결과를 list로 받아서 게시물 뿌려주듯이 한줄한줄 일자와 반환 코드가 나오면 됩니다!

    덧셈된 값이 아닌 드코님이 말씀하신데로 list로 받아서 게시물 뿌려주듯이 한줄한줄 일자와 반환 코드가

    나오면 됩니다.  그 반환코드가 나오면 그것을 DB에 집어 넣을려고 할 계획입니다.

    anomalyDB = 0

    for i in range(0,9000) :

        if (0 in df['use_value'] == df['mdate'] == 24) :

                anomalyDB = 0 

        else:

                anomalyDB = 1

    print("수도사용량 없이 24시간 동안 지속된 횟수 : %d" %anomalyDB)


  • 드코
    3k
    2020-06-09 17:30:10
  • 열사빵빵이
    595
    2020-06-09 18:04:16

    드코님 말씀데로 일단 파이썬에 쿼리를 넣어서 진행하고 있습니다 근데 다음과 같은 오류가 나오네요

    UndefinedFunction: 오류:  left(timestamp without time zone, integer) 이름의 함수가 없음
    LINE 1: select left(mdate,10) as aDate, if(count(*)=24,'0','1') as a...
                   ^
    HINT:  지정된 이름 및 인자 자료형과 일치하는 함수가 없습니다. 명시적 형변환자를 추가해야 할 수도 있습니다.


    anomalyquery = "select left(mdate,10) as aDate, if(count(*)=24,'0','1') as aResult from tbl_water_meter_dummy where use_value=0 group by aDate order by aDate asc"
    
    cur.execute(anomalyquery, conn)
    
    anomaly = pd_sql.read_sql(anomalyquery, conn)
    
    
    
    conn.commit()
    
    conn.close()
    
    anomaly.head()


  • 드코
    3k
    2020-06-10 09:26:47

    제가 사용한 left() 함수는 mysql 의 구문인데 사용하시는 DB가 다르시다면 left()함수와 동일한 기능을 하는 해당 db의 함수를 찾으시면 됩니다.

  • 열사빵빵이
    595
    2020-06-10 09:29:47

    아하 postgres라서 오류가 나오는군요.. 근데 postgres도 left()함수가 있는데 말이죠 뭐지..ㅠ

  • 드코
    3k
    2020-06-10 09:31:47

    저 쿼리를 실제 DB에서 돌려보시고 작동이 되면 그다음에 파이썬에 넣어서 한번 해보시면 도움이 될거같습니다

  • 드코
    3k
    2020-06-10 09:33:01

    그리고 정확한 오류 라인을 알기 위해서 이런식으로 각 라인별로 띄워서 돌려보시면 도움이 될겁니다

    select left(mdate,10) as aDate
    , if(count(*)=24,'0','1') as aResult 
    from tbl_water_meter_dummy 
    where use_value=0 
    group by aDate 
    order by aDate asc
  • 열사빵빵이
    595
    2020-06-10 09:33:32

    select left('mdate',10) as Date, case when count(*)=24 then '0' else '1' end as aResult from tbl_water_meter_dummy where use_value=0 group by aDate order by aDate asc

    변환했네요 감사합니다^^

  • 열사빵빵이
    595
    2020-06-10 09:47:33
    어디를 use_value라 바꿔야하나...뭐가 문제징..
  • 열사빵빵이
    595
    2020-06-10 09:48:50


  • 드코
    3k
    2020-06-10 09:57:33

    오마이갓..

    이번엔 쿼리를 설명드려야 겠네요

    select left('mdate',10) as aDate  이 부분은

    'mdate' <- 이렇게 작성하신건 그냥 단순한 문자 'mdate'를 의미하는것이라 결과값으로 그냥 mdate가 찍혔고

    원래는 저 부분을 그냥 컬럼명인 mdate로 해주셔야 합니다 '' <- 감싸면 문자로 취급이 됩니다.

    left( 컬럼명, 10) 하면 해당 데이터의 왼쪽부터 10개까지 짤라서 표현이 됩니다.


  • 열사빵빵이
    595
    2020-06-10 10:05:05

    아까전에도  그렇게 해봤는데 그렇게하니깐  mdate를 인식을 못해버려요 으아아아앙 뭐가문젠지를 모르겠어요...

  • 드코
    3k
    2020-06-10 10:07:17

    혹시 db만 사용이 가능하신가요 db툴에 쿼리문 놓고 돌려보면 되는데

  • 열사빵빵이
    595
    2020-06-10 10:10:27

    잠시만요 해볼께요~

  • 드코
    3k
    2020-06-10 10:10:30

    tbl_water_meter_dummy 테이블에 컬럼명 mdate가 있는것도 확인해주시고 만약 있다면 그냥 left함수말고

    날짜포맷 함수 인 to_timestamp(mdate,'YYYY-MM-DD') 로 사용해서 포맷을 변경해주시면 될듯

  • 열사빵빵이
    595
    2020-06-10 10:11:54

    이렇게 나오네요... sqlgate로 쿼리 돌려봤는데 똑같이 뜨네용..

  • 열사빵빵이
    595
    2020-06-10 10:12:49

    mdate가 pk로 잡혀있긴 하구 위에 방법으로 해볼게요!

  • 드코
    3k
    2020-06-10 10:13:34

    잘은 모르겠지만 포스트그리에선 left함수로 날짜를 나눌수가 없는가 잘은 모르겠네요

    위에 써준거처럼 날짜 포맷을 변경시켜주는 함수쪽으로 사용해서 년월일 시분초의 데이터를 년월일로 변경해줘야 합니다

  • 열사빵빵이
    595
    2020-06-10 10:24:15

    흠..똑같네요.. 데이터유형이 timestamp without time zone이라 그런가.,...뭐가 문제지 도통모르겠네요..

  • 열사빵빵이
    595
    2020-06-10 10:27:25

    postgres에서도 쓰는 방법은 똑같은데 말이죠. left나 to_timestamp나 똑같은데..

  • 드코
    3k
    2020-06-10 10:27:57

    mdate의 컬럼 형식은 뭔가요? 문자? 날짜?

  • 열사빵빵이
    595
    2020-06-10 10:28:58

    timestamp without time zone 입니다~!

  • 열사빵빵이
    595
    2020-06-10 10:29:38


  • 드코
    3k
    2020-06-10 10:33:00
    SELECT to_char(now(), 'YYYY-MM-DD HH24:MI:SS.MS');
    -- 출력 : 2015-04-29 01:32:11.321 (현재시간 이 출력과 같다고 가정할 때.)

    SELECT to_timestamp('2015-04-29 01:32:11.321', 'YYYY-MM-DD HH24:MI:SS.MS');
    -- 출력 : 2015-04-29 01:32:11.321 이 sql 메니지 툴에 맞게 출력 (MS까지 모두 삽입됨.)

    SELECT to_char(to_timestamp('2015-04-29 01:32:11.321', 'YYYY-MM-DD HH24:MI:SS.MS'), 'YYYY-MM-DD HH24:MI:SS.MS');
    -- 출력 : 2015-04-29 01:32:11.321

    -- 주의 to_date 사용시 진짜 date 만들어간다.
    SELECT to_char(to_date('2015-04-29 01:32:11.321', 'YYYY-MM-DD HH24:MI:SS.MS'), 'YYYY-MM-DD HH24:MI:SS.MS');
    -- 출력 : 2015-04-29 00:00:00.000
    날짜 형식을 바꾸는게 이러한 것들이 있는거 같습니다. 저도 잘은 몰라서 자세히는 못도와드리는데
    to_char(컬럼,'YYYY-MM-DD')
    to_date(컬럼,'YYYY-MM-DD')
    to_timestamp(컬럼,'YYYY-MM-DD')
    다 확인을 해보셔야 될거같아요

  • 드코
    3k
    2020-06-10 10:33:53

    select mdate

    ,to_char(mdate,'YYYY-MM-DD')

    ,to_date(mdate,'YYYY-MM-DD')

    ,to_timestamp(mdate,'YYYY-MM-DD')

    from tbl_water_meter_dummy 


    db에 이렇게 종류별로 다해보고 안한것도 찍어보고 맞는게 뭔지 찾아보죠

  • 열사빵빵이
    595
    2020-06-10 10:37:16
    해보고 말씀드릴게용!
  • 드코
    3k
    2020-06-10 10:40:45 작성 2020-06-10 10:41:08 수정됨

    무엇보다 중요한건 to_char, to_date, to_timestamp 의 차이를 알아야 될거 같아요 그래야 다음에 사용 시 해매지 않을테니

    저도 알려주세여 힘들게 한번도 안써본 포스트그리 db 함수들 찾아왔으니

  • 열사빵빵이
    595
    2020-06-10 10:42:48


    anomalyquery = "select to_char(mdate,'YYYY-MM-DD HH24:MI:SS.MS') as aDate, case when count(*)=24 then '0' else '1' end as aResult from tbl_water_meter_dummy where use_value=0 group by aDate order by aDate asc"
    

    오오 감사합니다!!!!! 근데..... 0이안나오네요.. use_value 24시간동안 0인부분이 있는데 그러면 0으로 나와야하는데 그렇게 나오질 않네요..


  • 열사빵빵이
    595
    2020-06-10 10:44:13
    엥근데....왜 위에 부분 1일날은 24개로 안나눠서 집계되어있찌
  • 드코
    3k
    2020-06-10 10:45:01

    이부분은 쿼리를 그냥 빨리빨리 해버리고 처리하실려고 쿼리를 100% 이해를 안하셔서 생긴 문제 입니다.

    도와 드릴수도있지만 이부분만이라도 이해를 하고 넘어가셨으면 좋겠어요 꼭필요한 부분이라서 ㅠ


    힌트는 group by와 to_char 입니다.

  • 열사빵빵이
    595
    2020-06-10 10:54:39
    흰트 조금만더 주시면 안될까요....
  • 드코
    3k
    2020-06-10 10:58:50 작성 2020-06-10 10:59:23 수정됨


    컬럼1컬럼2
    강아지2
    강아지1
    바나나1

    이렇게 있을 시

    select 컬럼1, sum(컬럼2) 

    from 테이블

    group by 컬럼1

    한다면 

    컬럼1컬럼2
    강이지3
    바나나1

    이런 결과가 나옵니다

    group by 컬럼 사용시 해당 컬럼의 같은값들을 한번에 묶어버립니다

    그러므로 현재 사용중인 출력결과물은 2020-01-01 시:분:초 까지 나오므로 중복된 데이터가 하나도 없기에 모든 데이터가 나 나와버립니다. 2020-01-01 이렇께 년월일 까지만 묶는다면 모든 시분초 상관없이 일자별로 데이터가 묶이므로 일자당 24개의 시간이 한번에 묶이게 됩니다.

  • 열사빵빵이
    595
    2020-06-10 11:06:11

    오감사합니다! 이해해서 일자별로 묶었더니 원하는 데이터가 들어오네요!!

  • 열사빵빵이
    595
    2020-06-10 11:08:40

    엥 근데 365개의 데이터가 나와야 정상인데 104개가 들어오네요..뭐지..?

  • 열사빵빵이
    595
    2020-06-10 11:11:20


    select date_format(mdate,'%Y-%m-%d') as aDate, case when count(*)=24 then '0' else '1' end as aResult from tbl_water_meter_dummy where use_value=0 group by aDate order by aDate asc


    결론적으로 mysql에선 이문구인데....흠.....뭐지

  • 드코
    3k
    2020-06-10 11:14:58

    1일 2일 3일 ~ 해서 총 1년치  365일 의 데이터가 있어야 되는건가요?

    그렇다면 나온 데이터중 어디 일자가 빠졌는지 확인 후 왜 저 쿼리문에 안나왔는지 원인을 찾아야될거같아요

  • 열사빵빵이
    595
    2020-06-10 11:16:18

    네 맞습니다. 데이터 확인상 1일부터 31일까지 모두 다있구용 8760개의 데이터 나누기 24하면 365일 딱 떨어지게 나와욥!!

  • 드코
    3k
    2020-06-10 11:17:01

    저 쿼리문 상으로는 이럴 수있을거 같아요


    1일 2일 3일이 있다치면 1일에 use_value가 다 0 이면 나오고

    2일에 use_value가 1이 1개 있어도 나오고

    3일에 use_value가 전부다 1일경우는 해당 쿼리에 안나올거 같아요


    해당일자에 use_value가 전부다 1일 경우가 있을 수있다면 쿼리를 수정해야될거같아요

  • 열사빵빵이
    595
    2020-06-10 11:18:23

    아 그렇네요... use_value가 전부다 1일경우가 있다보니 한번 해보고 여쭤볼게요!!!!ㅎㅎㅎ

  • 열사빵빵이
    595
    2020-06-10 11:25:49

    어디다가 추가해야할지를 모르겠네요.....윽.... . 힌트혹시 주실수 있을까요?

  • 드코
    3k
    2020-06-10 11:28:21

    방법은 많은데 저도 일단 첫번째로 생각드는게 있지만 효율이 좋지못한 쿼리라서 더좋은 방법이 있나 찾아보고 있습니다.


    요점은 그룹으로 묶기전 use_value가 0인것만 뽑아오기때문에 이미 use_value가1로만 되어있는 일자가 있으면 조회에서 탈락되는게 문제 입니다. 

    결론은 use_value가 1인애도 가져온 후 그다음 0과 1로 분기를 나눠야 될거같은 느낌이 듭니다.

  • 드코
    3k
    2020-06-10 11:29:18

    밥먹고 오겠습니다.

  • 열사빵빵이
    595
    2020-06-10 11:42:29

    식사맛있게하세요~~^^

  • 열사빵빵이
    595
    2020-06-10 13:29:51
    흠...이래저래 생각을 해봤는데 흠... 여기서 뭘건드려야 할지를 모르겠네요.. use_value =0  and use_value =1 을 해버리니 아무것도 안나와버리니..
  • 드코
    3k
    2020-06-10 13:57:01 작성 2020-06-10 13:58:15 수정됨

      select date_format(mdate,'%Y-%m-%d') as aDate

       ,if(sum(use_value)='0','0','1') as aResult

        from tbl_water_meter_dummy

      group by aDate

       order by aDate asc


    머리좀 썻습니다. 


    일자별 use_value의 값을 sum으로 합했습니다 합계가 0일경우 24개모두 0이기때문에 0을 반환 아닐경우 1을 반환 합니다.

  • 열사빵빵이
    595
    2020-06-10 14:00:00
    아까랑 뭐가 다른지 궁금합니다!! 알려주세용..... 설명만부탁드리겠습니다..
  • 열사빵빵이
    595
    2020-06-10 14:00:19

    아...그렇군요....대단하십니다..

  • 드코
    3k
    2020-06-10 14:02:19

    아까와의 차이점은 아까는 count로 조건이 use_value=0인 데이터의 갯수를 구했고

    지금은 sum으로 use_value의 값들을 0인지 1인지 안나누고 전부다 햅했습니다.

  • 열사빵빵이
    595
    2020-06-10 14:02:22


     select to_char(mdate,'YYYY-MM-DD') as aDate ,case when sum(use_value)='0' then '0' else '1' end as aResult from tbl_water_meter_dummy group by aDate order by aDate asc
    
    

    postgres에선 이렇게 사용되네요... 감사합니다!! 질문이 시원하게 해결됬습니다 ㅎㅎ

  • 열사빵빵이
    595
    2020-06-10 14:02:53

    드코님은 DB전문가이신가보네요..

  • 드코
    3k
    2020-06-10 14:07:22

    DB전문가는 아니고 그냥 웹페이지 유지보수 해주는 사람입니다.ㅎㅎ

  • 열사빵빵이
    595
    2020-06-10 14:08:14 작성 2020-06-10 14:08:45 수정됨

    으...저는 인공지능 개발자인데 DB쪽을 아에 건드릴줄을 모르겠네요..어떻게 접근해야할지..후

    불러와서 분석만 해봤지...이런건 처음이라..ㅋㅋ

  • 드코
    3k
    2020-06-10 14:09:38

    IT분야에서  모든 분야는 전부다 결국은 데이터를 가지고 넣었다 뺏다 수정했다 삭제했다 하는게 주 일이기때문에 결국은 DB의 기본적인 쿼리문은 다룰줄 알아야 합니다. 웹페이지 유지보수 하면서도 게시판의 글을 넣었다 뺏다 삭제했다 수정했다 등등 작업을 하기때문에 기본적인 쿼리만 알면 됩니다

  • 열사빵빵이
    595
    2020-06-10 14:23:14

    에거 너무 많은걸 가르쳐달라는것 같아서 그건 아닌것 같네요..ㅎㅎ;; 

  • 열사빵빵이
    595
    2020-06-10 15:20:45


    드코님 이번엔 인서트문인데 컬럼도 맞고한데 왜에러뜨는지 모르겠어요..

  • 열사빵빵이
    595
    2020-06-10 19:21:04

    드코님 혹시 하나만 더 여쭤봐도될까요?

  • 드코
    3k
    2020-06-11 10:48:43

  • 열사빵빵이
    595
    2020-06-11 16:03:18

    IndexError Traceback (most recent call last) in 7 cur = conn.cursor() 8 ----> 9 cur.executemany("""INSERT INTO tbl_emergency (date, status) VALUES (%s, %s)""", object_string) 10 conn.commit()

    IndexError: string index out of range

    이런오류가 뜨는데 뭐가문제인지를 모르겠어요...ㅠㅠㅠ

    import numpy as np
    import psycopg2
    import pandas.io.sql as pd_sql
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib import rc
    
    conn = psycopg2.connect(host='XXX.XXX.XXX.XXX', dbname='XXXXX', user='XXXX', password='XXXXX', port='5432') # db connection
    cur = conn.cursor() 
    
    
    anomalyquery = "select to_char(mdate,'YYYY-MM-DD') as date ,case when sum(use_value)='0' then '0' else '1' end as status from tbl_water_meter_dummy group by date order by date asc"
    cur.execute(anomalyquery, conn)
    anomaly = pd_sql.read_sql(anomalyquery, conn)
    
    conn.commit()
    anomaly.head(365)
    
    
    date    status
    0   2019-01-01  0
    1   2019-01-02  0
    2   2019-01-03  0
    3   2019-01-04  0
    4   2019-01-05  0
    ... ... ...
    360 2019-12-27  1
    361 2019-12-28  1
    362 2019-12-29  1
    363 2019-12-30  1
    364 2019-12-31  1
    
    
    an_object = anomaly
    object_string = str(an_object)
    print(object_string)
    print(type(object_string))
    
               date status
    0    2019-01-01      0
    1    2019-01-02      0
    2    2019-01-03      0
    3    2019-01-04      0
    4    2019-01-05      0
    ..          ...    ...
    360  2019-12-27      1
    361  2019-12-28      1
    362  2019-12-29      1
    363  2019-12-30      1
    364  2019-12-31      1
    
    [365 rows x 2 columns]
    <class 'str'>
    
    host = 'xxx.xxx.xxx.xxx'
    dbname = 'xxxx'
    user = 'xxxx'
    pwd = 'xxxxxx'
    
    conn = psycopg2.connect('host={0} dbname={1} user={2} password={3}'.format(host, dbname, user, pwd))
    cur = conn.cursor()
    
    cur.executemany("""INSERT INTO tbl_emergency (date, status) VALUES (%s, %s)""", object_string)
    conn.commit()
  • 드코
    3k
    2020-06-11 16:33:52
  • 드코
    3k
    2020-06-11 16:43:45

    파이썬은 잘 모르지만 

    이부분에서 의문점이있습니다

    1.insert문 양옆으로 " <-가 왜이렇게 많은가요?

    2. %s,%s가 있는데 %s 부분에는 , 콤마후에 오른쪽에 변수값이 들어갈거 같은데 %s가 2개인대 변수는 1개라서 2번째 %s가있는곳에 들어갈것이 없어 보입니다.

    
    cur.executemany("""INSERT INTO tbl_emergency (date, status) VALUES (%s, %s)""", object_string)
  • 드코
    3k
    2020-06-11 16:46:37

    object_string 에는 뭔가 들어 있는지도 궁금합니다

    지금 해당 변수의값을 인서트문에 저대로넣으면  


    insert into tbl_emergency (date,status) values (2020-01-01,0) 이렇게 안들어가고 


    무언가 벨류값에 터무니 없는 값이 들어 갈거 같습니다 현재 인서트문 구조상으로는 데이터가 최대 1개까지바께 안들어가게 되어 있습니다.


  • 열사빵빵이
    595
    2020-06-11 16:46:51
    """는 원래 이렇게 들어가더라구요.. 변수 1개 object_string 여기에 date와 status 두개다 있는데 안들어가는건가요/
  • 드코
    3k
    2020-06-11 16:48:46

    아마 

    insert into INTO tbl_emergency(date, status)

    select to_char(mdate,'YYYY-MM-DD') as date 

    ,case when sum(use_value)='0' then '0' else '1' end as status 

    from tbl_water_meter_dummy 

    group by date 

    이렇게 실행 시 조회됨과 동시에 조회된 데이터가 그대로 tbl_emergency테이블로 들어갈겁니다.


  • 열사빵빵이
    595
    2020-06-11 16:50:52

    오옹 일단 해보겠습니다!

  • 드코
    3k
    2020-06-11 16:54:09

    이렇게 되면 위에는 조회 후 조회된 결과를 가지고 인서트문을 시켰다면


    저쿼리로는  저거만 실행시키면 바로 원하는 방법대로 되니 한번만 실행만 시키도록 하면 되지 않을까 합니다

  • 열사빵빵이
    595
    2020-06-11 16:54:53

    anomalyquery = "insert into tbl_emergency(date, status) select to_char(mdate,'YYYY-MM-DD') as date ,case when sum(use_value)='0' then '0' else '1' end as status from tbl_water_meter_dummy group by date"

    cur.execute(anomalyquery, conn)

    anomaly = pd_sql.read_sql(anomalyquery, conn)

    conn.commit()

    anomaly.head(365)\


    NoneType' object is not iterable 일케 뜨네용.....뭐지.... INTO 넣으니깐 또 오류떠서 지우고 해봤거든요.
  • 드코
    3k
    2020-06-11 16:58:40
  • 드코
    3k
    2020-06-11 16:59:27
  • 열사빵빵이
    595
    2020-06-11 17:00:29

    엥...반복문 자체가 없어용 뭐지..? 저위에 있는 코드가 다에용

  • 드코
    3k
    2020-06-11 17:01:08
    cur.execute(anomalyquery, conn)
    cur.executemany()
    이둘의 차이점은 뭔가여 위에껀 셀렉트시 사용하셨고 아래에는 인서트 시 사용하셨는데 위에보니까

  • 열사빵빵이
    595
    2020-06-11 17:01:29

    쿼리만 바꿨어용 원래 출력잘됬었는뎅...뭐지..?

  • 열사빵빵이
    595
    2020-06-11 17:03:43

    위에껀 호출 이구요 밑에껀 삽입하는 문구에욥!

  • 드코
    3k
    2020-06-11 17:07:29

    그럼 위에 인서트 셀렉트 구문도 아래꺼로 사용하셔야 될거같아요

  • 열사빵빵이
    595
    2020-06-11 17:13:42

    오 됬습니다!!! 감사합니다!!!

  • 드코
    3k
    2020-06-11 17:17:32

    어떻게 했나요

  • 열사빵빵이
    595
    2020-06-11 17:19:54

    anomalyquery = "insert into tbl_emergency(date, status) select to_char(mdate,'YYYY-MM-DD') as date ,case when sum(use_value)='0' then '0' else '1' end as status from tbl_water_meter_dummy group by date"

    cur.execute(anomalyquery, conn)

    conn.commit()


    2줄지우니깐 됐어요! 그리고 혹시 이걸 배치파일로 만들면 자동으로 24개데이터 알아서 체크해서 넣어주나용? 그리고 저쿼리에서 홈코드 까지 넣고 싶으면 어떻게해야하나용?

  • 드코
    3k
    2020-06-11 17:35:10

    배치파일로 만들면 일정 시간마다 해당 쿼리가 실행되면서 알아서 데이터를 넣어주긴 하는데

    문제는 예를들어서 2018-01-01 의 데이터가 들어갔다면 

    다음실행시 똑같은 데이터가 또들어갑니다.

  • 열사빵빵이
    595
    2020-06-11 17:42:18

    아 똑같은 데이터가 들어갔을떄 말인가요???

  • 드코
    3k
    2020-06-11 18:01:12

    그러니 인서트전에 전부다 지우고 새로넣을지 아니면 등록일자를 따로 관리하여 인서트되는 일자를 키값으로 따로 관리할지 방법을 생각해보셔야 됩니다

  • 열사빵빵이
    595
    2020-06-11 18:06:36

    으..일단 해보구 ! 질문드리겠습니다! 감사합니다!!!

  • 열사빵빵이
    595
    2020-06-12 09:33:24

    드코님 2018-01-01 데이터가 들어갔다는게 새로운 데이터가 1개가 들어갔을때 말인가요? 24개데이터 중 한개가 1이면 24개가 다시 총계되면 1로 바뀌지않나용? 이해를 잘못해서..

  • 드코
    3k
    2020-06-12 10:25:15

    A테이블에서 B테이블로 데이터를 가공해서 넣는 작업인데


    B테이블의 테이블 구조가 어떻게 되어 있는지는 모르겠지만

    총 2개의 컬럼의 값을 insert 해주는 거니


    2018-01-01~ 2019-01-01 각 날짜별 use_value값이 들어 갈겁니다.


    그후 해당 isnert작업을 또 실행 하면


    2018-01-01~ 2019-01-01 각 날짜별 use_value값이 또들어 갈겁니다.

    그중에  use_value의 값이 바뀐것도 있고 안바뀐것도 있겠지만

    안바뀐 데이터라면 첫번째 넣은 2018-01-01의 데이터와 두번째 들어간 2018-01-01의 데이터가 어느것이 나중에 들어간 데이터인지 구분이 안갈거 같습니다.

  • 열사빵빵이
    595
    2020-06-12 11:13:42

    흠...그방법은 또다시 생각해봐야할 부분이겠네요...ㅠ.... 혹시 앞에 home_code를 넣어서 구분을 지으면 되지않을까요?

  • 열사빵빵이
    595
    2020-06-12 11:23:18

    만약 홈코드도 집어넣고싶다면 insert into tbl_emergency(home_code,date, status) select to_char(mdate,'YYYY-MM-DD') as date ,case when sum(use_value)='0' then '0' else '1' end as status from tbl_water_meter_dummy group by date" 어떻게 더 추가하면될까요?

  • 드코
    3k
    2020-06-12 11:26:07

    insert into A(a,b,c)

    select a,b,c

    from table

    각 abc가 매칭되어 들어가기때문에 순서를 맞춰야 합니다.

  • 열사빵빵이
    595
    2020-06-12 14:49:21

    anomalyquery = "insert into tbl_emergency(home_code, date, status) select home_code home_code, to_char(mdate,'YYYY-MM-DD') as home_code ,case when sum(use_value)='0' then '0' else '1' end as status from tbl_water_meter_dummy group by home_code"

    도저희 모르겠네요..ㅠㅠㅠㅠㅠㅠㅠ
  • 드코
    3k
    2020-06-12 16:54:39

    쿼리가 완전 고장났습니다 


    왜 home_code로 그룹을 맺으셨나요


    그리고 조회 부분에 home_code가 몇개 씩 써있는건가요 ㅠㅠ

  • 열사빵빵이
    595
    2020-06-12 16:57:18

    anomalyquery = "insert into tbl_emergency(home_code, date, status) select home_code, to_char(mdate,'YYYY-MM-DD') as date ,case when sum(use_value)='0' then '0' else '1' end as status from tbl_water_meter_dummy group by date" 이문구는 그룹바이가 안묶여있다하구..뭐가 문제인지를 모르겠어요..ㅠㅠㅠㅠㅠ

  • 드코
    3k
    2020-06-12 16:59:47

    date, status 라는 이름을 다른거로 바꿔보세요 as 뒤에 붙히는건 별명이라 컬럼명을 표시할 명으로 쓰지만


    date, status 이런 문장들은 그자체만으로도 효과가 있는 단어가 잇기 때문에 문자로 취급안될수도 있어요

  • 열사빵빵이
    595
    2020-06-12 16:59:51

    anomalyquery = "insert into tbl_emergency(home_code, date, status) select home_code to_char(mdate,'YYYY-MM-DD') as date ,case when sum(use_value)='0' then '0' else '1' end as status from tbl_water_meter_dummy group by date"

    이렇게 바꿔도안되고...
  • 드코
    3k
    2020-06-12 17:01:13

    select

    home_code,

    to_char(mdate,'YYYY-MM-DD') as date ,

    case when sum(use_value)='0' then '0' else '1' end as status


    지금 표시할 컬럼이 3가지이고 , 콤마가 빠져있어요

  • 열사빵빵이
    595
    2020-06-12 17:03:13

    콤마 넣어도 GroupingError: 오류: column "tbl_water_meter_dummy.home_code" 는 반드시 GROUP BY 절내에 있어야 하던지 또는 집계 함수 내에서 사용되어져야 한다

    LINE 1: ...nto tbl_emergency(home_code, date, status) select home_code,... 일케 뜨네요... 으으윽..
  • 드코
    3k
    2020-06-12 17:04:56

    아하 혹시 home_code 라는것은 어떤 데이터인가요

  • 열사빵빵이
    595
    2020-06-12 17:07:14


    이런형태의 데이터입니다.

  • 드코
    3k
    2020-06-12 17:11:11

    데이터의 종류가 A000001 이거 1개 뿐인가요?

  • 열사빵빵이
    595
    2020-06-12 17:14:30
    나중엔 여러가지 데이터가 들어올겁니다.
  • 드코
    3k
    2020-06-12 17:14:55

    group by 컬럼  으로 묶을 시


    여러 데이터가 중복된건 1개로 묶여서 표현이 됩니다 그러믄로 1개의 일자당 24개의 시간이 다묶여서 표현이 됐었죠

    다만 use_value를 표현시 이 값이 1시때의 use_value인지 2시때의 use_value인지 일자별로 다 묶었기때문에 누구의 값을 표현해 줄지 모릅니다 그러므로 sum으로 모든 시간대의 값을 합쳤죠


    하지만 home_code샅은경우는 문자이끼대문에 1시때의 홈코드를 표현할지 2시,3시 ..24시 어느시간대의 홈코드를 표현할지 모릅니다.


    그러기에 나온 에러이구요 정상적으로 사용하기위해선 홈코드의 데이터 가 어떠한것이 들어가는지 알아야 합니다.

  • 드코
    3k
    2020-06-12 17:16:40

    1일의 1시부터 24시간의 데이터중 누구의 홈코드를 표현할지 알아야 하고


    아무시간대의 홈코드를 표현해도 된다면 max(home_code) 할경우 홈코드의 문자중 가장 큰값을 표현하게 될겁니다.

  • 열사빵빵이
    595
    2020-06-12 17:18:50

    홈코드라는게 정확히는 사람이름이라 생각하시면되구용 들어오는 순서는 상관없습니다. 음 한마디로

    김철수 2020-01-01 1  

    이철수 2020-01-01 0

    박철수 2020-01-01 1

    이런식으로 들어오면 됩니당! 

  • 드코
    3k
    2020-06-12 17:21:37

    아그렇다면 

    group by date,home_code

    이렇게 해주시면 됩니다.

  • 드코
    3k
    2020-06-12 17:23:59 작성 2020-06-12 17:24:24 수정됨

    김철수 20200101 1시 1

    김철수 20200101 1시 1

    김민수 20200101 2시 1

    김진수 20200101 3시 1

    이렇게 데이터가 있을 시 쿼리를 실행하면


    김철수 202010101 1

    김민수 202010101 1

    김진수 202010101 1

    이렇게 1일자로 묶이고 각 이름별로 또 묶이게 됩니다.

    그러므로 1일자에 n개의데이터가 생성 될 수있습니다.

  • 열사빵빵이
    595
    2020-06-12 17:26:16

    음 문제가 뭔지 잘모르겠네용 김철숙사 1시에 1을썻다면 1로 된다면 상관없구 이름이 겹칠일은 없습니다.

  • 드코
    3k
    2020-06-12 17:28:18

    김이 1일 1시에 1쓰고

    이가 1일2시에 0쓰고 해서


    결국 인서할 때 1일에 2개의 데이터가 들어가는데 상관은 없으신건가요?

  • 드코
    3k
    2020-06-12 17:29:33

    홈코드를 넣기전 상태를 보면 일자별로 데이터가 1건씩 이였는데 꼭 1건이 아니여도 된다면


    그룹바이에 

    group by date,home_code

    쓰고


    select 에 그냥 home_code 추가시켜주면 됩니다

  • 열사빵빵이
    595
    2020-06-12 17:33:11

    네 order by로 home_code로 두면 사람들 간에 데이터가 썪이진 않을것 같네요.

  • 드코
    3k
    2020-06-12 17:37:48

    지금 하시려는게 일자별 실패가 난 일자가 있는지 확인하는 거였다면


    홈코드가 추가된 후로는


    일자별 사람별 실패난 일자가 있는지 확인하는 것으로 변경되었는데 취지가 맞는지 확인하시면 될거같습니다

  • 열사빵빵이
    595
    2020-06-12 17:42:19 작성 2020-06-12 17:42:52 수정됨

    아참 근데 생각해보니깐 이걸 배치파일로 돌리게 된다면 계속 똑같은 데이터가 들어가지 않을까요???ㅎㄷㄷㄷㄷㄷㄷㄷ 365개면 몇분뒤에다시 365개가 들어가고 몇분뒤에도 365개가 들어가고....똑같은 쿼리가 반복되는거니깐용..

  • 드코
    3k
    2020-06-12 17:44:19

    네 그내용은 어제 했던 내용같아요 같은 데이터가 들어간다고 했던


    그래서 해당 데이터를 다 지우고 넣을 지  아니면 데이터 등록일자를 추가적으로 만들어 이력으로 관리할지

  • 열사빵빵이
    595
    2020-06-12 18:01:53

    으..어렵네요...그부분이제일 데이터 등록일자를 추가적으로 만들면 매번 쿼리도 고쳐야겠네요...

  • 드코
    3k
    2020-06-13 11:55:53

    아녀 인서트로 등록시 자동으로 해당 날짜 및 시분초가 입력되게끔 할 수가 있어요

  • 열사빵빵이
    595
    2020-06-15 08:29:42 작성 2020-06-15 08:30:38 수정됨

    앗 그러면 중복된데이터는 안들어간다는 말씀이신가용? 그러면 2019년까지의 데이터가 자동으로 24개씩 등록된다할때 2020년1월1일 데이터가 들어와도 24개가 아니면 입력이 안되는건가용?

  • 드코
    3k
    2020-06-15 09:09:24

    home_code, date, user_value 3개의 값을 받고있으니

    home_code, date, user_value, signDate


    signDate 항목을 추가 후 해당 항목에 now()을 넣어줘서 현재 날짜가 들어가도록 하면 될거 같습니다.


    그리고 우리글이 덧글이랑 조회자가 너무 많아서 메인에 베스트글로 올라가버렸는데 너무 창피하거든요

  • 열사빵빵이
    595
    2020-06-15 09:49:02

    엌.ㅋ........드코님 제가 다시 글을 올리겠습니다.ㅠㅠㅠㅠㅠ

  • SeonWoo
    52
    2020-09-24 16:41:39 작성 2020-09-24 16:42:48 수정됨

    글을 보다 갑자기 궁금해서 그런데


    anomalyDB = 0

    for i in range(0,9000) :

        if (0 in df['use_value'] == df['mdate'] == 24) :

                anomalyDB = 0 

        else:

                anomalyDB = 1

    print("수도사용량 없이 12시간 동안 지속된 횟수 : %d" %anomalyDB)


    그 한번만 출력된다는 이 코드는 프린트 부분이 들여 쓰기 안된거 아닌가요 ...?

  • 로그인을 하시면 답변을 등록할 수 있습니다.