2014-07-09 2 views
0

다음 쿼리가 있습니다. 내 그룹 내에서 가장 오래된 행 (DATE 열 기준) 만 선택해야합니다. 나의 조건을 지킨다.mysql은 조건에 따라 그룹 내 조건을 정의합니까?

SELECT 
table.* 
from table 
where views > $views AND sales>23 
group by 
name 

조금 선명가 나는 일을 시도

이 두번째

+--------------------+-----------+--------------------+-----------+ 
| name    | views  | DATE    | sales | 
+--------------------+-----------+--------------------+-----------+ 
| sue3    |  494 | 2014-06-27 12:08:29| 45  | 
| sue4    |  520 | 2014-06-26 12:08:29| 56  | 
| sue5    |  570 | 2014-06-24 12:08:29| 28  | 
+--------------------+-----------+--------------------+-----------+ 

marko.c에 FRM이 첫번째 테이블

+--------------------+-----------+--------------------+-----------+ 
| name    | views  | DATE    | sales | 
+--------------------+-----------+--------------------+-----------+ 
| sue1    |  494 | 2014-06-23 12:08:29| 26  | 
| sue2    |  494 | 2014-06-25 12:08:29| 34  | 
| sue3    |  494 | 2014-06-27 12:08:29| 45  | 
| sue4    |  520 | 2014-06-26 12:08:29| 56  | 
| sue5    |  570 | 2014-06-24 12:08:29| 20  | 
| sue5    |  570 | 2014-06-24 12:08:29| 28  | 
+--------------------+-----------+--------------------+-----------+ 

통과 같다 될 이 부분을 다음으로 선택하십시오.

SELECT 
table.* 
from table 
where views > $views AND sales>23 
and date in (select max(date) from table where views > $views AND sales>23) 
group by 
name 

하지만 작동하지 않습니다. 아무도?

+0

무엇을 말하고 있습니까? – evanv

+0

ORDER BY DATE DESC LIMIT 1을 사용할 수 있습니다. 이렇게하면 결과가 DATE IN 내림차순으로 1 행 만 표시됩니다. 그것이 당신을 위해 작동하는지 알려주세요. –

+0

원하는 출력은 무엇입니까? –

답변

0

하위 쿼리에서 최대 전체 날짜를 선택하지만 실제로 원하는 것은 각 이름의 최소 (가장 오래된) 날짜입니다.

SELECT 
    t1.* 
from table t1 
join (
    select 
     t2.name, 
     min(t2.date) min_date 
    from table t2 
    where t2.views > $views AND t2.sales > 23 
    group by t2.name 
) t2 on t2.name = t1.name and t2.min_date = t1.date 
where t1.views > $views AND t1.sales > 23 
0

처음으로 나는 솔직하게 당신이 원하는지 잘 모르겠습니다. 나는 당신의 요구가 가장 오래된 날짜로 모든 독특한 견해를 얻는 것이라고 생각합니다. 그러나 어떤 경우에는 당신이 각 일에 대해 가장 오래된 날짜를 원한다면 그것을 주문한 후에 그룹을하십시오.

SELECT * FROM(
    SELECT 
    table.* 
    FROM table 
    WHERE views > $views AND sales>23 
    ORDER BY date 
) AS t 
GROUP BY name; 

당신은 거꾸로의 날짜 생각에 총 .. 그래서

MAX(date) will give you the NEWEST date because it is the greatest date. 
MIN(date) will give you the OLDEST date because it is the oldest/smallest date. 

을 수행 할 때 당신이 당신의 다른 게시 된 쿼리를 수행하기를 원한다면 당신은 할 수

SELECT 
table.* 
from table 
where views > $views AND sales>23 
and date in (select MIN(date) from table where views > $views AND sales>23) 
group by 
name 

및 MIN (날짜)이 트릭을 수행하는지 확인하십시오

관련 문제