如何显示用户的最后记录

时间:2019-02-14 13:04:59

标签: php mysql

我有一个表,并且该表中有100多个记录。我有相同的记录,但是添加的日期不同。

表是

    public void FillDataGridView(DataGrid datagrid)
    {
        for (var i=0; i < hList.Count; i++)
        {
            double value = Convert.ToDouble(hList[i].Libre.Substring(0,5));

            if (value < 5) // For example
            {
                // Retrieve intended row, and colorize it to Red 
            }
            else
            {
                // Retrieve intended row, and colorize it to Green
            }
        }
        datagrid.ItemsSource = hList;
    }

我在下面的查询中尝试过,但是它显示了与member_id = 101相关的所有记录。我需要member_id的最后一条记录。

m_id | member_id  | c_k   | b_k  | date_of_added
1    | 101        | qwer  |sdad1 | 14-02-2019 02:26:30
2    | 101        | qwe2  |sdad2 | 14-02-2019 03:30:20
3    | 102        | qweg  |sdad3 | 14-02-2019 04:00:40
4    | 101        | qwe3  |sdad4 | 14-02-2019 04:30:20
5    | 102        | qweg  |sdad5 | 14-02-2019 05:45:30

我的预期输出是

SELECT * from m_details WHERE member_id=101 GROUP by member_id ORDER BY date_of_added DESC 

您能帮我解决查询中的问题吗?

标记PHP团队是因为我正在使用PHP,但是在查询中遇到了问题。

7 个答案:

答案 0 :(得分:0)

改为使用它:

SELECT * // Gets everything
FROM m_details // From your table
WHERE member_id=101 // For member #101
ORDER BY date_of_added DESC // Gets the last result 
LIMIT 1 // Only shows that result

答案 1 :(得分:0)

在MySQL 8.0中,使用ROW_NUMBER()

SELECT * FROM (
    SELECT t.*, ROW_NUMBER() OVER(PARTITION BY member_id  ORDER BY date_of_added DESC) rn
    FROM mytable t
) WHERE member_id=101 AND rn = 1

这种方法的优点是,即使您需要显示的信息不仅仅涉及逻辑信息,它也可以使用,与GROUP BY / LIMIT解决方案相反,后者仅适用于单个用户一次。

在早期版本的MySQL中,这也可以使用NOT EXISTS条件来实现:

SELECT t.*
FROM mytable t
WHERE 
    t.member_id = 101
    AND NOT EXISTS (
        SELECT 1 
        FROM mytable t1 
        WHERE t1.member_id = t.member_id AND t1.date_of_added > t.date_of_added
    )

答案 2 :(得分:0)

您的查询是正确的。如果您需要最后一条记录,则只需要使用LIMIT 1

const axiosRetry = require('axios-retry');
axiosRetry(axios, { retries: 3 });

var data = { /*----My JSON Object----*/ };

axios.post('my url', data, {
    headers: {
        'Authorization': 'API_Key',
        'Content-Type': 'application/json'
    }
})
.then(function(response){
    console.log(response);
})
.catch(function(error){
    console.log(error);
});

答案 3 :(得分:0)

SELECT * from m_details 
WHERE member_id=101 
ORDER BY date_of_added DESC
LIMIT 1

GROUP BY只是模糊了结果,因为它不一定从发现的最后一行中选择数据。

答案 4 :(得分:0)

SELECT * from m_details WHERE member_id=101 ORDER BY m_id DESC LIMIT 1

使用以上查询获取预期输出。在这种情况下,不需要按子句分组。

答案 5 :(得分:0)

由于member_id可以具有重复的值(根据给定的数据集),因此您可以将m_id列标识为唯一值,并(自动)增加值(看起来是这样),然后根据降序获取更新后的值,然后只需通过设置LIMIT 1选择第一行。因此,编写删除group by子句的查询:

SELECT * from m_details WHERE member_id=101 order by m_id DESC LIMIT 1;

希望,这会有所帮助。 N.B .:似乎新条目的date_of_added值不能低于以前的值,因为没有关于它的具体信息,否则按date_of_added

排序

答案 6 :(得分:-1)

要获取唯一的最新记录,请使用DESCLIMIT = 1,如下所示:

SELECT * from m_details WHERE member_id = 101 ORDER BY date_of_added DESC LIMIT 1;