에라모르겠다(‘◇’)?
[Django] 날짜 조건별로 테이블에 저장된 첫번째 값 / 마지막 값 구하기 본문
from datetime import datetime
from dateutil.relativedelta import relativedelta
start_year = 2020
end_year = 2023
for year in range(start_year, end_year + 1):
for month in range(1, 13):
# 해당 월의 첫 번째 날짜 계산
start_date = datetime(year, month, 1)
# 해당 월의 다음 달 첫 번째 날짜 계산
next_month = start_date + relativedelta(months=1)
# 다음 달 첫 번째 날짜에서 하루를 빼고, 이를 해당 월의 마지막 날짜로 설정
end_date = next_month - relativedelta(days=1)
query = "SELECT time FROM your_table WHERE year = ? AND month = ? AND day >= ? AND day <= ? ORDER BY time ASC LIMIT 1;"
prepared_query = session.prepare(query)
result = session.execute(prepared_query, [year, month, start_date.day, end_date.day])
if result.one() is None:
continue
first_date = result.one().time
break
if first_date:
break
for year in range(end_year, start_year - 1, -1):
for month in range(12, 0, -1):
start_date = datetime(year, month, 1)
next_month = start_date + relativedelta(months=1)
end_date = next_month - relativedelta(days=1)
query = "SELECT time FROM your_table WHERE year = ? AND month = ? AND day >= ? AND day <= ? ORDER BY time DESC LIMIT 1;"
prepared_query = session.prepare(query)
result = session.execute(prepared_query, [year, month, start_date.day, end_date.day])
if result.one() is None:
continue
last_date = result.one().time
break
if last_date:
break
print("First date:", first_date)
print("Last date:", last_date)
만약 db에 30만건 이상 데이터가 있는 경우,
데이터가 일정 주기로 insert되지 않는 경우 구하는 방법
-- month 기준
from datetime import datetime
start_year = 2020
end_year = 2023
for year in range(start_year, end_year + 1):
for month in range(1, 13):
query = "SELECT time FROM your_table WHERE year = ? AND month = ? ORDER BY time ASC LIMIT 1;"
prepared_query = session.prepare(query)
result = session.execute(prepared_query, [year, month])
if result.one() is None:
continue
first_date = result.one().time
break
if first_date:
break
for year in range(end_year, start_year - 1, -1):
for month in range(12, 0, -1):
query = "SELECT time FROM your_table WHERE year = ? AND month = ? ORDER BY time DESC LIMIT 1;"
prepared_query = session.prepare(query)
result = session.execute(prepared_query, [year, month])
if result.one() is None:
continue
last_date = result.one().time
break
if last_date:
break
print("First date:", first_date)
print("Last date:", last_date)
-- day 기준
'Language > Python' 카테고리의 다른 글
[Python] 멀티프로세싱 multiprocessing (1) | 2023.06.29 |
---|---|
[Python] selenium - 크롤링 (2) actions을 이용한 스크롤링 (0) | 2023.06.21 |
[Python] selenium - 크롤링 (1) 자동로그인 (0) | 2023.06.21 |
[Django] select, where 쿼리 각각 생성 (0) | 2023.06.12 |
[python] kafka연동 (0) | 2023.06.08 |
Comments