2017-03-18 50 views
0

我的第一个查询如何选择总的行号列

SELECT 
    id, 
    year_, 
    month_ 
FROM 
    (SELECT 
     tp.id, 
     YEAR(FROM_UNIXTIME(tp.visited_date)) as year_, 
     MONTH(FROM_UNIXTIME(tp.visited_date)) as month_, 
     @rn := IF(@prev = CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)),MONTH(FROM_UNIXTIME(tp.visited_date))), @rn + 1, 1) AS rn, 
     @prev := CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)),MONTH(FROM_UNIXTIME(tp.visited_date))) 
    FROM 
     tr_place tp 
    JOIN 
     (SELECT @prev := NULL, @rn := 0) AS vars 
    ORDER BY 
     YEAR(FROM_UNIXTIME(tp.visited_date)) DESC, 
     MONTH(FROM_UNIXTIME(tp.visited_date)) DESC) AS T1 
WHERE 
    rn < 3; 

威尔返回数据集This is the result which I got from the query

子查询它

SELECT 
    tp.id, 
    YEAR(FROM_UNIXTIME(tp.visited_date)) as year_, 
    MONTH(FROM_UNIXTIME(tp.visited_date)) as month_, 
    @rn := IF(@prev = CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)),MONTH(FROM_UNIXTIME(tp.visited_date))), @rn + 1, 1) AS rn, 
    @prev := CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)),MONTH(FROM_UNIXTIME(tp.visited_date))) 
FROM 
    tr_place tp 
JOIN 
    (SELECT @prev := NULL, @rn := 0) AS vars 
ORDER BY 
    YEAR(FROM_UNIXTIME(tp.visited_date)) DESC, 
    MONTH(FROM_UNIXTIME(tp.visited_date)) DESC; 

返回数据The sub query will returns this data

我需要子查询的最大rn作为第一个查询中的列。

我该如何做到这一点?

回答

0

您可能在变量赋值时遇到问题。您不应该在select的多个表达式中引用变量。因此,编写第一个查询的正确方法是:

SELECT id, year_, month_ 
FROM (SELECT tp.id, 
      YEAR(FROM_UNIXTIME(tp.visited_date)) as year_, 
      MONTH(FROM_UNIXTIME(tp.visited_date)) as month_, 
      (@rn := IF (@prev = CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)), MONTH(FROM_UNIXTIME(tp.visited_date))), @rn, 
         if(@prev := CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)), MONTH(FROM_UNIXTIME(tp.visited_date))), 1, 1 
         ) 
      ) as rn 
     FROM tr_place tp JOIN 
      (SELECT @prev := NULL, @rn := 0) AS vars 
     ORDER BY YEAR(FROM_UNIXTIME(tp.visited_date)) DESC, 
       MONTH(FROM_UNIXTIME(tp.visited_date)) DESC 
    ) t1 
WHERE rn < 3; 

请注意,变量赋值都在单个表达式中。

这可能会解决您的问题。

+0

此查询给出语法错误... –

+0

@Travalourdeveloper。 。 。这没有多大帮助。你应该说错误是什么(可能是一个错误的括号)。 –

+0

这是一个错位的逗号。那么,这一刻已经过去了。 – Strawberry