database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 2089 게시물 읽기
No. 2089
select 문 좀 만들어 주세요....
작성자
미친곰탱이
작성일
2005-07-11 16:17
조회수
3,580

제발 select 문 하나만 좀 만들어 주세요

테이블은 현재 두개가 있고 (member, command) 이 두 테이블을 이용해 뷰를

생성시켰습니다. (member_view)

 

member 테이블은 아래와 같이 생성 시켰고

create table member(
m_no char(8) not null,
m_name varchar(10) not null,
m_email varchar(20) no null,
m_password char(20) not null,
constraint pk_member_m_no primary key (m_no)
)

 

command 테이블은 아래와 같이 생성 시켰습니다.

create table command(
com_no char(10) not null,
com_date datetime not null,
com_note varchar(400),
com_m_no char(8) not null,
constraint fk_command_d_com_m_no foreign key (d_com_m_no) references member (m_no),
constraint pk_command_d_com_no primary key (d_com_no)
)

 

그리고 이 두 테이블을 이용해 아래와 같이 뷰를 생성시 켰습니다.

create view member_view as
select
member.m_no as m_no,
member.m_name as m_name,
member.m_email as m_email,
command.com_note as m_note,
command.com_date as m_change_date,
from member,command
where member.m_no=command.com_m_no

 

여기서 뷰를 이용해서 오늘 날짜를 넘지 않는 m_change_date 중 가장 최근 것 하나만 (즉 m_no 가 중복되지 않게) 가지는 m_no와 m_change_date 그리고 m_note의 내용을 가지고 오는 select 문을 만들고 싶습니다.
(결과를 보면 마치 member_view에서 m_no가 주키 처럼 되고 각 m_no에 대한 최근 데이터 한개 씩만 나올 수 있도록 하는 쿼리문을 원합니다.)

답변해주시면 정말 감사하겠습니다.

이 글에 대한 댓글이 총 1건 있습니다.

테이블 구조를 건드릴 순 없나요?

별로 생각해 보진 않았지만, 테이블 구조를 바꾸면 query가 간단해 질 것 같은데..

 

그럼..

 

이하 샘플입니다..

 

create table member(
m_no char(8) not null,
m_name varchar(10) not null,
m_email varchar(20) not null,
m_password char(20) not null,
constraint pk_member_m_no primary key (m_no)
)
go


insert into member values ('MNO00001', 'test name1', 'test e-mail1', 'must be encrypted!!!')
insert into member values ('MNO00002', 'test name2', 'test e-mail2', 'must be encrypted!!!')
insert into member values ('MNO00003', 'test name3', 'test e-mail3', 'must be encrypted!!!')
go

 

create table command(
com_no char(10) not null,
com_date datetime not null,
com_note varchar(400),
com_m_no char(8) not null,
constraint fk_command_d_com_m_no foreign key (com_m_no) references member (m_no),
constraint pk_command_d_com_no primary key (com_no)
)
go


insert into command values ('CNO00001', getdate(), 'command1 description for test!!!', 'MNO00001')
insert into command values ('CNO00002', dateadd(day, -1, getdate()), 'command2 description for test!!!', 'MNO00001')
insert into command values ('CNO00003', dateadd(day, -2, getdate()), 'command3 description for test!!!', 'MNO00002')
insert into command values ('CNO00004', dateadd(day, -3, getdate()), 'command4 description for test!!!', 'MNO00002')
insert into command values ('CNO00005', dateadd(day, -4, getdate()), 'command5 description for test!!!', 'MNO00002')
go

 

select * from member
select * from command
go

 

create view member_view_left_join as
select m.m_no, m.m_name, m.m_email, c.com_note as m_note, c.com_date as m_change_date
  from member as m
          left join            -- member를 기준으로 데이터를 추출할 때..
--          inner join         -- 양쪽 모두 존재하는 데이터만 원할 때..
          (select c1.com_m_no, c1.com_date, c2.com_note
              from (select com_m_no, max(com_date) as com_date
                          from command
                          where com_date < getdate()    -- 참고 : getdate()는 현재시각임..
                          group by com_m_no) c1
                      left join
                      (select com_m_no, com_date, com_note
                           from command) c2
                      on c1.com_m_no = c2.com_m_no
                     and c1.com_date = c2.com_date) c
          on m.m_no = c.com_m_no
go

 

select * from member_view_left_join
go

 

drop view member_view_left_join
drop table command
drop table member

 

길가는 나그네..님이 2005-07-11 17:40에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
20921000건만 조회하고 싶습니다. [5]
초보
2005-07-12
4346
2091MS-SQL로 SP 포팅하려 하는데요 [2]
박승호
2005-07-12
5134
2090mysql password 함수를 이용한 암호화를 mssql로 변환하려면 [4]
신현주
2005-07-12
4603
2089select 문 좀 만들어 주세요.... [1]
미친곰탱이
2005-07-11
3580
2088이거 무슨말입니까? [3]
이혜섭
2005-07-08
2316
2087substring관련 query문제입니다. [2]
black
2005-07-08
3221
20864.0.x --> 4.1.x 업데이트 후, Access 속도가 현저히 느려져서... [1]
이진
2005-07-07
1814
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다