2013-07-24 5 views
-1

나는 큰 테이블을 가지고 있는데, 테이블은 날짜별로 몇 개로 나뉘어졌습니다.mysql 하위 쿼리를 만드는 방법

원래 테이블

UserLoginTable 
+---------+------------+---------+ 
| UserID | LoginTime | others | 
+---------+------------+---------+ 
| 1  | 2013-03-12 | .... | 
+---------+------------+---------+ 
| 2  | 2013-05-12 | .... | 
+---------+------------+---------+ 
| 1  | 2013-06-12 | .... | 
+---------+------------+---------+ 
| ... | ...  | .... | 
+---------+------------+---------+ 

이제 표이다 :

UserLoginTable_Date(yyyyMM) 

UserLoginTable_201303

+---------+------------+---------+ 
| UserID | LoginTime | others | 
+---------+------------+---------+ 
| 1  | 2013-03-12 | .... | 
+---------+------------+---------+ 

UserLoginTable_201304

+---------+------------+---------+ 
| UserID | LoginTime | others | //this table is not have UserID=1 
+---------+------------+---------+ 
| 2  | 2013-04-01 | .... | 
+---------+------------+---------+ 
,691 363,210

나는

select count(*) from UserLoginTable_201307 where UserID=1 
select count(*) from UserLoginTable_201306 where UserID=1 
... 

그래서 난 하나의 SQL

+--------------+ 
| UserInYear | 
+--------------+ 
| 201303  | //here dose find User in 201304 
+--------------+ 
| 201306  | 
+--------------+ 
| ....  | 
+--------------+ 

최고 효율 점에서이 형식 표시 방법을 Kown하려는 데 사용됩니다. 감사. 그것에 대해

답변

0

select count(*) as UserInYear from UserLoginTable_201307 where UserID=1 
union all 
select count(*) from UserLoginTable_201306 where UserID=1 

참고 아래로 union all를 사용해보십시오 : union all는 중복을 제거하지 않습니다. 복제하고 싶지 않다면 union insetad를 사용해야합니다.

+0

고마워요, 당신은 빠른 – zt9788

+0

죄송합니다, 나는 또한 결과를 표시하는 방법은 결과를 표시하는 UserInYear (카운트 번호가 아님), 그냥 날짜 (201307 또는 201306 ...) 카운트 경우> 0 – zt9788

+0

무언가를 추가하려고 'where' 절 아래에'count (distinct date)> 0 '을 가짐 like – Parado

0

사용 UNION ALL : 어떤 년 UNION ALL에 대한 UserInYear에 대한 중복 값이 ​​

SELECT COUNT(*) AS UserInYear FROM UserLoginTable_201307 WHERE UserID = 1 
UNION ALL 
SELECT COUNT(*) FROM UserLoginTable_201306 WHERE UserID = 1 

경우 모든 동안 UNION이 표시되지 않습니다 표시됩니다. 따라서 UNION ALL을 사용하십시오.

+0

감사로 CUSTOMERNUMBER로 COLUMN_NAME와 checkNumber로 COLUMN_NAME1 및 column_number 가정,하지만! :) – zt9788

+0

@ zt9788 - 문제는 아니지만 실제로 나는 그보다 빠릅니다. (5 초) :) – hims056

+0

@ hims056 IMO 코드가 작동하지 않습니다. 정확한 위치에 별칭이 있습니까? – Parado

0

하위 쿼리의 예 :

SELECT column_name, column_name1, column_number 
FROM their_table 
WHERE column_number = (SELECT MAX(column_number) FROM the_other_table); 

가 Parado 빨리 다음 AMO

관련 문제