I have 3 tables (stars mach the ids from the table before):
product:
prod_id*    prod_name   prod_a_id   prod_b_id   prod_user 
keywords:
key_id**    key_word    key_prod*   kay_country 
data: 
id  dat_id**    dat_date    dat_rank_a  dat_traffic_a   dat_rank_b  dat_traffic_b 
I want to run a query (in a function that gets a $key_id) that outputs all these columns but only for the last 2 dates(dat_date) from the 'data' table for the key_id inserted - so that for every key_word - I have the two last dat_dates + all the other variables included in my SQL query:
So... This is what I have so far. and I don't know how to get only the MAX vars. I tried using "max(dat_date)" in different ways that didn't work.
SELECT prod_id, prod_name, prod_a_id, prod_b_id, key_id, key_word, kay_country, dat_date, dat_rank_a, dat_rank_b, dat_traffic_a, dat_traffic_b
    FROM   keywords
        INNER JOIN data 
            ON keywords.key_id = data.dat_id
        INNER JOIN prods
            ON keywords.key_prod = prods.prod_id
Is there a possability to do this with only one query?
EDIT (FOR IgorM):
public function newnew() { 
    $query = $this->db->query('WITH CTE AS
                                (
                                   SELECT *,
                                         ROW_NUMBER() OVER (PARTITION BY dat_id ORDER BY dat_date ASC) AS                   
                                   RowNo FROM data
                                )
                                SELECT *
                                FROM CTE
                                INNER JOIN keywords 
                                        ON keywords.key_id = CTE.dat_id
                                    INNER JOIN prods
                                        ON keywords.key_prod = prods.prod_id
                                WHERE RowNo < 3
                            ');
    $result = $query->result();
    return $result;
}
This is the error on the output:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CTE AS ( SELECT *, ROW_NUMBER() OVER (' at line 1
WITH CTE AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY dat_id ORDER BY dat_date ASC) AS RowNo FROM data ) SELECT * FROM CTE INNER JOIN keywords ON keywords.key_id = CTE.dat_id INNER JOIN prods ON keywords.key_prod = prods.prod_id WHERE RowNo < 3
 
     
     
     
     
     
    