我有一个表,并且该表中有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,但是在查询中遇到了问题。
答案 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)
要获取唯一的最新记录,请使用DESC
和LIMIT = 1
,如下所示:
SELECT * from m_details WHERE member_id = 101 ORDER BY date_of_added DESC LIMIT 1;