MySQL中怎样取出具有相同字段值的前n条记录? 比如:select name where id
发布网友
发布时间:2023-03-20 12:27
我来回答
共3个回答
热心网友
时间:2023-10-06 04:48
CREATE TABLE SALE_REPORT (
SALE_DATE DATETIME NOT NULL ,
SALE_ITEM VARCHAR(2) NOT NULL ,
SALE_MONEY DECIMAL(10,2) NOT NULL
);
DELIMITER //
CREATE PROCEDURE CreateReportData()
BEGIN
DECLARE v_begin_day DATE;
DECLARE v_end_day DATE;
SET v_begin_day = STR_TO_DATE('2009-01-01', '%Y-%m-%d');
SET v_end_day = STR_TO_DATE('2013-01-01', '%Y-%m-%d');
WHILE v_begin_day < v_end_day DO
INSERT INTO SALE_REPORT VALUES
(v_begin_day, 'A',
Year(v_begin_day) );
INSERT INTO SALE_REPORT VALUES
(v_begin_day, 'B',
Month(v_begin_day) );
INSERT INTO SALE_REPORT VALUES
(v_begin_day, 'C',
DAY(v_begin_day) );
SET v_begin_day = DATE_ADD(v_begin_day, INTERVAL 1 DAY);
END WHILE;
END;
//
DELIMITER ;
call CreateReportData();
使用模拟的 ROW_NUMBER + PARTITION 的方式
SELECT
sale_item,
sale_date,
sale_money
FROM
(
SELECT
CASE
WHEN @cn != sale_item THEN @rownum:= 1
ELSE @rownum:= @rownum + 1
END AS No,
@cn := sale_item AS sale_item,
sale_date,
sale_money
FROM
(SELECT @rownum:=0) r,
(SELECT @cn:='') p,
SALE_REPORT
ORDER BY
SALE_ITEM,
SALE_DATE DESC
) subQuery
WHERE
no <=3;
+-----------+---------------------+------------+
| sale_item | sale_date | sale_money |
+-----------+---------------------+------------+
| A | 2012-12-31 00:00:00 | 2012.00 |
| A | 2012-12-30 00:00:00 | 2012.00 |
| A | 2012-12-29 00:00:00 | 2012.00 |
| B | 2012-12-31 00:00:00 | 12.00 |
| B | 2012-12-30 00:00:00 | 12.00 |
| B | 2012-12-29 00:00:00 | 12.00 |
| C | 2012-12-31 00:00:00 | 31.00 |
| C | 2012-12-30 00:00:00 | 30.00 |
| C | 2012-12-29 00:00:00 | 29.00 |
+-----------+---------------------+------------+
9 rows in set (0.02 sec)
追问谢谢!太复杂了,有没有两三句就可以解决的办法?
热心网友
时间:2023-10-06 04:49
嵌套就可以了
热心网友
时间:2023-10-06 04:49
select top 3 * from tablename orderby id desc
MySQL之查询重复记录、删除重复记录方法大全
一、查找重复记录\ 1、查找全部重复记录\ Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)2、过滤重复记录(只显示一条)\ Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) 注:此处显示ID最大一条记录 二、...
在mysql数据库中如何让某个字段有重复的只取一条
select top 1 id,name,age from 表 order by age desc按照年龄倒序排序,然后取第一条。考虑可能有多人年龄相同,如果都需取出,可以这样写:select id,name,age from 表 where age=(select max(age) from 表)
Mysql查询数据库表中前几条记录
在查询分析器中输入select*fromstudentlimit5;即可查询到下图的情况:所以说,在Mysql中取出表中前几条记录是用关键字 limit,而在Sql-server中则是用top关键字,但是Mysql子查询却不支持 limit ,也就是说,如:select*fromuserswhereidnotin(selectidfromuserslimit3)and1limit3;是有语法错误的,/* ...
在MYSQL中怎么写SQL语句,能取到表中按ID降序排列的前五条记录??
你可以设定多个字段来排序。你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。你可以添加 WHERE…LIKE 子句来设置条件。所以,楼主所问的问题答案应该为:select ... from ... order by ID desc limit(0,5)...
mysql怎么查询一条记录的前一条记录和后一条记录
select top 1 * from news where id > ID and classid=classid order by id asc select top 1 * from news where id < ID and classid=classid order by id desc 你可能要先把当前的记录查出来,取出这条记录的分类ID,然后才能写出下面的2条查询语句。mysql 与 msql一样,都用Transact-...
mysql 根据两个字段值查询时如何去除重复数据
假设表名为test:select * from (select *, concat(name,code) as __f from test order by date desc) __t group by __f;
MySQL怎么查询数据库中的前几条记录并返回呢
有“WHERE 1”这种写法吗?我没有试过,按我的理解WHERE条件不能这样省略吧?总得有个完整的表述吧,是某条件对于1?还其它?应该是“WHERE ID = 1”或者“WHERE ID > 1”这样的格式。ORDER BY 'ID',加引号我没有用过,是“`”还是“'”?我的习惯是不加,直接写“ORDER BY ID”...
在mysql数据库中如何让某个字段有重复的只取一条?
给个例子把,比如:表table_a 4条数据id A B C D01 ab 1a2 1b2 12102 ab 2a3 3b3 4a103 ac 1a2 1b2 12104 ac 2a4 3b2 52g何让A字段重复取条 比01 ab 1a2 1b2 12103 ac 1a2 1b2 121 保留相同A值id行select *from table_a awhere not exists (select 1 from table_a b...
mysql获取第n条记录
1、开启电脑,并打开mysql的数据库,在数据库中点击并进入右上的查询,在点击查询下面的新建查询。如图,2、接下来就可以输入SELECT * from crew_1 order by gmt_create这个语句,然后表中的所有记录就会按时间排序查询。如图。3、如果需要获取表中按时间排序的第一条记录,就输入SELECT * from crew_...
如何在MySQL中查询当前数据上一条和下一条的记录
方法一:查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误):select * from table_a where id = (select id from table_a where id < {$id} [and other_conditions]order by id desc limit 1 )[and other_conditions];查询下一条记录的SQL语句(...