안드로이드 개발 질문/답변
(글 수 45,052)
아래와 같은 결과값을 얻고 싶습니다..
쿼리를 어떻게 작성해야 할까요?
2011.11.29 04:53:21
일단 SQL Lite에서 테스트한건 아니라 동작 여부는 확실하지는 않습니다.
SELECT _id, id, message, time
FROM test
WHERE time IN
(SELECT MAX(time)
FROM test
GROUP BY id)
참고로 말씀드리면 time값을 기준로 하신다고 해서 위와 만든것인데, time값이 중복이 될 경우 잘못된 중복값이 나올수도 있습니다.
따라서 _id값이 time이 증가할때마다 함께 증가한다고 가정하면 아래처럼 하시는게 훨씬 좋은 처리가 됩니다.
SELECT _id, id, message, time
FROM test
WHERE _id IN
(SELECT MAX(_id)
FROM test
GROUP BY id)
2011.11.29 05:10:22
아.. 제가 빠르트린 부분이 있는데요. 저기서 따로 필드를 더 뽑아내야 할 부분이 있습니다..
그래서 SELECT뒤에 필드선택부분에서 처리해줘야하는데요... 그건 어떻게하죠?
2011.11.29 05:13:58
SELECT
id,
...... <-- 여기서 처리해줘야해요...
MAX(time) AS time,
SUM(time) AS total,
FROM table
GROUP BY id
ORDER BY time ASC;
이런식으로 되어 있거든요..
2011.11.29 05:29:29
SELECT
id,
...... <-- 여기서 처리해줘야해요...
MAX(time) AS time,
SUM(time) AS total, // 위 그림에서는 생략되어 있습니다.
SUM(CASE WHEN is_n=0 THEN 1 ELSE 0 END) AS n0_c,
SUM(CASE WHEN is_n=1 THEN 1 ELSE 0 END) AS n1_c,FROM table
GROUP BY id
ORDER BY time ASC;
....... 이부분을... 못하겠네요... 타입값이 가장큰 메세지가 들어가야 합니다..
2011.11.29 05:31:47
SELECT
t.message, b.*
FROM test t, (
SELECT
id,
MAX(time) AS time,
SUM(time) AS total
FROM test
GROUP BY id
) b
WHERE t.id=b.id and t.time=b.time
ORDER BY id
이렇게 하면 되는데, SQL Lite에서 지원해줄지는 모르겠네요. 일반적인 DBMS에서는 전부 지원해주기는 하는데..물론 현재의 쿼리는 아이디별로 봤을때 time값이 유니크하다는 가정하에만 동작하는겁니다. 유니크가 아니라면 _id 값까지 찾아주는걸로 수정하시면 될듯하고요.



