온도/습도 등의 기상 데이터를 LabVIEW를 통해 DB에 저장하고 싶다는 문의에 대한 답변 입니다. 

Q : 온도/습도 등의 몇개의 기상데이터가 10초마다 몇달을 txt파일로 저장하는데,
     DB를 쓰면 특정 구간의 평균/최대/최소 등의 통계 혹은 rawdata 값을 쉽게 뽑아 낼 수 있는지요?
A : 날짜 컬럼으로 Index(목ㅊ, 색인) 가 걸려 있다면 특정 날짜 구간의 데이터를 빠르게 추출 및 통계(MIN, AVG, MAX 등)도 빠르게 계산이 가능 합니다. 

 

어떤 DB를 사용해야 좋을 지 문의하신다면 결론부터 말해서 MSSQ(Express) 버전으로 시작하시길 권해드립니다.

Express 버전의 경우 개인사용자는 무료이고 MSSQL 자체가 GUI 환경이어 타 DB에 비해 설치 및 운용이 간편하여

접근성이 좋습니다. 물론 성능도 타 DB에 비해 절~대 뒤떨어 지지 않습니다.

MSSQL 단점 은

- Windos 계열의 OS 에서 (만?) 설치 및 운용이 가장 편리합니다. 

물론 리눅스에도 설치가 가능하다는데, 직접 설치해 본 적이 없어서, 설치 난이도가 어떤지 알지 못합니다.

https://docs.microsoft.com/ko-kr/sql/linux/sql-server-linux-setup?view=sql-server-ver15

 

SQL Server on Linux 설치 지침 - SQL Server

SQL Server on Linux를 설치, 업데이트 및 제거합니다. 이 문서에서는 온라인, 오프라인 및 무인 시나리오를 설명합니다.

docs.microsoft.com

 

------------------------------------------------------ LabVIEW ------------------------------------------------------

LabVIEW : https://www.ni.com/ko-kr.html

 

자동화 테스트 및 자동화 측정 시스템 - National Instruments

업계 최고의 측정 정확성을 제공하면서 비용, 설계 및 디바이스 관련 문제를 해결할 수 있도록 지원하는 NI 반도체 테스트 솔루션을 만나보십시오.

www.ni.com

LabVIEW 와 DB를 연동하려면 애드온을 구매해야 한다는군요.

LabVIEW DB연동 모듈
LabVIEW : ODBC 드라이버를 통한 DB 연동 가능

 

------------------ 아래 1번 부터 4번 까지 진행하시면 테스트 환경 구축은 가능하시리라 생각 됩니다.  ---------------

1. MSSQL Express 다운로드 및 설치방법 블로그 입니다. (퍼왔습니다.)

https://eine.tistory.com/entry/Microsoft-SQL-Server-2019-Express-%EC%84%A4%EC%B9%98

 

Microsoft SQL Server 2019 Express 설치 + SSMS

MS-SQL 설치 MS-SQL을 써야 할 일이 생겨서 한번 설치해보자. 테스트용으로만 필요하기 때문에 무료 테스트용 버전인 Express를 설치해보도록 하겠다. https://www.microsoft.com/ko-kr/sql-server/sql-server-dow..

eine.tistory.com

 

 

2. MSSQL DB 관리툴 입니다.

SSMS(SQL Server Management Studio)

https://docs.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15

 

SSMS(SQL Server Management Studio) 다운로드 - SQL Server Management Studio (SSMS)

최신 버전의 SSMS(SQL Server Management Studio)를 다운로드합니다.

docs.microsoft.com

 

 

3. 설치 완료 후 DB 생성 및 DB 사용 계정 생성 방법 입니다. (퍼왔습니다.)

https://server-talk.tistory.com/248

 

MSSQL 데이터베이스(DB) 생성과 새 로그인 사용자 추가

MSSQL 데이터베이스(DB) 생성과 새 로그인 사용자 추가 알아보기 이번에는 MSSQL에서 데이터베이스(DB) 생성과 계정생성을 알아보도록 하겠습니다 이전 글 : Windows SQL Server 2014 Express 설치 - http://serv..

server-talk.tistory.com

 

4. LabVIEW - MSSQL 연동 방법입니다. (퍼왔습니다.)

https://guslabview.tistory.com/66

 

[LabVIEW] MSSQL UDL 파일 생성 및 랩뷰와 연동 하기

[LabVIEW] MSSQL UDL 파일 생성 및 랩뷰와 연동 하기 이 글에서는 LabVIEW와 MSSQL을 연동하는 방식에 대해서 설명을 드리겠습니다. 랩뷰에서 손쉽게 DB에 접속하기 위해서는 UDL 파일이 필요합니다. UDL 파일은 U..

guslabview.tistory.com

 

기타 문의 사항은 게시판에 남겨 주세요.

아래와 같은 테이블에 대하여 USERID 가 존재할 경우에는 UPD_DATE 를 현재 날짜로 갱신하고

존재하지 않을 경우에는 INSERT 하는 쿼리를 Merge Into로 만들경우 아래와 같이 작성하게 되면

UPDATE 는 되는데 INSERT 는 되지 않습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET SERVEROUTPUT ON;
 
BEGIN 
 
MERGE INTO TBL_USER TA
USING (SELECT USERIDX, USERID, USERNAME FROM TBL_USER WHERE USERID='6') TB
ON (TA.USERIDX = TB.USERIDX)
WHEN MATCHED THEN
    UPDATE SET TA.UPD_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT (TA.USERIDX, TA.USERID, TA.USERNAME)
    VALUES (6'6''NM_6')
;
dbms_output.put_line(SQL%ROWCOUNT);
COMMIT;
 
END;
 

아래와 같이 변경하시면

데이터가 있을 경우 Update, 없을 경우 Insert를 수행하게 됩니다.

- 중요한 부분은 위 TB 집합을 DUAL 로 변경하고 ON 절에 Where 조건을 기입하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET SERVEROUTPUT ON;
 
BEGIN 
 
MERGE INTO TBL_USER TA
USING DUAL
ON (TA.USERID = '6')
WHEN MATCHED THEN
    UPDATE SET TA.UPD_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT (TA.USERIDX, TA.USERID, TA.USERNAME)
    VALUES (6'6''NM_6')
;
dbms_output.put_line(SQL%ROWCOUNT);
COMMIT;
 
END;
 

 

실행 결과 입니다.

Merge Into 실행 결과

안녕하세요. 

제가 크롤링 후 올려드리는 MySQL 백업파일의 복원방법을 문의하시는 분들이 있어서 복원 방법 설명드립니다.

제가 올리는 백업파일의 경우 아래와 같이 Database를 생성하는 구문이 없습니다.

그렇기 때문에 먼저 복원할 Database를 생성해 주셔야 합니다.
제가 올리는 백업파일의 명칭이 [db_name]_[날짜] (db_stock_20190407_010101.bak) 이기 때문에 저와 동일하게 db_stock 로 DB를 생성해주셔도 되고, 본인이 미리 생성한 db가 있다면 그대로 사용해 주셔도 됩니다. 

db를 생성할 경우에는 cmd 창을 열어 MySQL에 접속하신 후 create database [db 명]을 실행해 주시면 됩니다.

show databases; 를 실행하여 생성된 db를 확인합니다.

압축파일이 위치한 폴더로 이동 후 mysql -uroot -p [db 명] < [백업파일명]  을 실행하시면 몇분 후 DB 복원이 완료됩니다.

복원 완료 후 MySQL Workbench 로 접속한 모습입니다.

Oracle의 NEXT_DAY 함수는 입력한 날짜 이후의 찾고자 하는 요일의 첫 번째 일자를 반한 합니다.

NEXT_DAY(날짜, 찾고자 하는 요일)

- 찾고자 하는 요일 : 1=일, 2=월, 3=화, 4=수, 5=목, 6=금, 7=토 

MSSQL 에는 대응되는 함수가 없기때문에 사용자 함수를 만들어 사용하셔야 합니다.

CREATE FUNCTION [dbo].[NEXT_DAY] (@p_date DATETIME, @p_WEEKNO INT) 
RETURNS DATETIME 
AS 
BEGIN 
DECLARE @next_day DATETIME; 

SELECT @next_day = DATEADD(DAY,n, @p_date) 
FROM (VALUES (1),(2),(3),(4),(5),(6),(7)) AS t(n) 
WHERE DATEPART(WEEKDAY, DATEADD(DAY,n, @p_date)) = @p_WEEKNO 
OR CONVERT(varchar(10), DATEPART(WEEKDAY, DATEADD(DAY,n, @p_date))) = @p_WEEKNO 

RETURN @next_day 
END 

GO

Oracle 의 NEXT_DAY 와 비교한 결과는

지정일 검색
요일
Oracle MSSQL
2020-02-16 23:56:17.077 1 2020-02-23 23:05:26 2020-02-23 23:56:17.077
2020-02-16 23:56:17.077 2 2020-02-17 23:05:26 2020-02-17 23:56:17.077
2020-02-16 23:56:17.077 3 2020-02-18 23:05:26 2020-02-18 23:56:17.077
2020-02-16 23:56:17.077 4 2020-02-19 23:05:26 2020-02-19 23:56:17.077
2020-02-16 23:56:17.077 5 2020-02-20 23:05:26 2020-02-20 23:56:17.077
2020-02-16 23:56:17.077 6 2020-02-21 23:05:26 2020-02-21 23:56:17.077
2020-02-16 23:56:17.077 7 2020-02-22 23:05:26 2020-02-22 23:56:17.077
2020-02-16 23:56:17.077 1 2020-03-01 23:05:26 2020-03-01 23:56:17.077
2020-02-16 23:56:17.077 2 2020-03-16 23:05:26 2020-03-16 23:56:17.077
2020-03-20 23:56:17.077 3 2020-03-24 23:05:26 2020-03-24 23:56:17.077
2020-03-31 23:56:17.077 4 2020-04-01 23:05:26 2020-04-01 23:56:17.077
2020-04-11 23:56:17.077 5 2020-04-16 23:05:26 2020-04-16 23:56:17.077
2020-04-22 23:56:17.077 6 2020-04-24 23:05:26 2020-04-24 23:56:17.077
2020-05-03 23:56:17.077 7 2020-05-09 23:05:26 2020-05-09 23:56:17.077

 

궁금증은 덧글로 편하게 남겨주세요.

마우스 자가 수리시 참고하면 좋을 스위치 기본 스펙 입니다.

BRAND Model 버튼 힘 기계적 수명 원산지
OMRON D2F-F-3-7 0.74N 2000만 클릭 일본
D2F-F 0.74N 1000만 클릭
D2FC-F-7N 0.74N 500만 클릭 중국
D2FC-F-7N(10M) 0.74N 1000만 클릭
D2FC-F-7N(20M) 0.74N 2000만 클릭
ZF ZF(체리)골드포인트 0.74N 6000만 클릭
ZF(체리)레드포인트 0.74N 3000만 클릭
HUANO 후아노 블루 0.74N 2000만 클릭
후아노 예로우 0.74N 800만 클릭
후아노 그린 0.74N 500만 클릭
후아노 핑크 0.74N 1000만 클릭
TTC TTC 골드 0.74N 3000만 클릭

MySQL 로 작성한 트리구조 탐색 쿼리를 MSSQL로 바꿔 보았습니다.

https://devse.tistory.com/28<< MySQL 쿼리

✔ 트리 구조

✔ 쿼리

1
2
3
4
5
6
7
8
9
10
11
12
13
declare @v_id varchar(45), @v_lev int
 
set @v_id = 'a20'; -- 시작 node
 
with tree as (
    select id, pid, 0 lev
    from t_test
    where id=@v_id
    union all
    select ta.id, ta.pid, (tb.lev + 1) lev
    from t_test ta inner join tree tb on ta.id = tb.pid
)
select id, pid, lev from tree order by lev desc

✔ 결과

✔ 테스트용 자료 입력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
USE [TEST_DB]
GO
 
CREATE TABLE [dbo].[t_test](
    [id] [varchar](45NOT NULL,
    [pid] [varchar](45NOT NULL,
    [data] [varchar](100NOT NULL,
 CONSTRAINT [PK_t_test] PRIMARY KEY CLUSTERED 
(
    [id] ASC
ON [PRIMARY]
ON [PRIMARY]
GO
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a1', N'a0', N'그림1')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a10', N'a9', N'그림10')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a11', N'a7', N'그림11')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a12', N'a8', N'그림12')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a13', N'a10', N'그림13')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a14', N'a10', N'그림14')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a15', N'a10', N'그림15')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a16', N'a13', N'그림16')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a17', N'a13', N'그림17')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a18', N'a14', N'그림18')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a19', N'a15', N'그림19')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a2', N'a1', N'그림2')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a20', N'a17', N'그림20')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a21', N'a4', N'그림21')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a22', N'a21', N'그림22')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a23', N'a5', N'그림23')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a24', N'a11', N'그림24')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a25', N'a11', N'그림25')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a26', N'a12', N'그림26')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a27', N'a9', N'그림27')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a28', N'a25', N'그림28')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a29', N'a22', N'그림29')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a3', N'a1', N'그림3')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a30', N'a2', N'그림30')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a4', N'a2', N'그림4')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a5', N'a4', N'그림5')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a6', N'a4', N'그림6')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a7', N'a6', N'그림7')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a8', N'a3', N'그림8')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a9', N'a3', N'그림9')
GO
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

✔ 실행 계획

+ Recent posts