我正在尝试从销售表中选择按日期排列的第三个最新商品记录
我已经为此搜索了“常规”sql。我想会是这样的
select sales.DATENAME(month, DATEADD (month, @mydate-1, CAST('2008-01-01' AS datetime))), sales.itemid, sales.itemname from (select * FROM sales ORDER BY salesdate DESC LIMIT 2) AS x ORDER BY salesdate LIMIT 1 WHERE itemid = $input
不管怎样,这是我的桌子
no salesid itemname itemid
----------------------------------
1 01/02/2018 A 100
2 01/05/2018 A 100
3 01/04/2018 A 100
4 01/01/2018 B 400
5 01/01/2018 A 100
6 01/07/2018 B 400
7 01/07/2018 A 100
8 01/11/2018 A 100
9 01/09/2018 B 400
10 01/08/2018 A 100
11 01/08/2018 B 400
按日期和 ID 排序后
no salesid itemname itemid
----------------------------------
5 01/01/2018 A 100
1 01/02/2018 A 100
3 01/04/2018 A 100
2 01/05/2018 A 100
7 01/07/2018 A 100
10 01/08/2018 A 100
8 01/11/2018 A 100
所以如果 $input = 100 则结果是第 7 条记录
我已经尝试过了
$this->db->select('sales.DATENAME(month,DATEADD(month, @mydate-1,CAST(\'2008-01-01\' AS datetime))),sales.itemid,sales.itemname')
->from('(select * FROM sales ORDER BY salesdate DESC LIMIT 2) AS x')
->order_by('salesdate ASC')
->limit(1)
->where('itemid', '$input', FALSE)
->get();
这是我的控制器
public function result()
{
$data = [
'data'=>$this->mresult->resultt()->row()
];
$this->load->view('vresult',$data);
}
以及我想在 vresult.php 上显示的内容
Item ID = <?= $data['itemid']; ?>
Item Name = <?= $data['itemname']; ?>
Sales Date = <?= $data['salesdate']; ?>
或者如果 $input = 100 就会像这样
Item ID = 100
Item Name = A
Sales Month = June
错误信息
Error Number: 1054
Unknown column '100' in 'where clause'
SELECT * FROM (SELECT * FROM sales ORDER BY salesdate DESC LIMIT 3) AS x WHERE salesid = 100 ORDER BY `salesdate` ASC LIMIT 1
Filename: C:/.../DB_driver.php
Line Number: 692
我使用“*”,因为显然 DATENAME 不适用于 mysql
我是新手,请善待我。谢谢你
检查下面的代码,其中内部查询从 sales 中选择所有列,并根据
row number (rn)
的降序添加 salesdate
,希望它有帮助。
$input_item_id = 100; // Item ID
$query = $this->db->query("
SELECT * FROM (
SELECT
sales.salesid,
sales.itemname,
sales.itemid,
sales.salesdate,
MONTHNAME(sales.salesdate) AS sales_month,
ROW_NUMBER() OVER (ORDER BY sales.salesdate DESC) AS rn
FROM
sales
WHERE
sales.itemid = $input_item_id
) AS subquery
WHERE
subquery.rn = 3
");
$result = $query->row();
if ($result) {
echo "Item ID = " . $result->itemid . "<br>";
echo "Item Name = " . $result->itemname . "<br>";
echo "Sales Month = " . $result->sales_month . "<br>";
}