A 产品表,model唯一
model def_price brand
001 0.5 wa
002 0.2 qa
003 0.3 waB来货表
model price who date
001 0.4 张三 2017-10-08
001 0.3 张二 2017-9-08
001 0.5 张三 2017-8-08
001 0.6 张三 2017-11-08
002 0.2 李四 2017-5-05
002 0.3 李五 2017-4-061:我想得到不重复的记录,并且这个记录是最新日期的。或是最低价格的记录。???
2:我想得到每条最低价格而不重复型号的数据,003来货表并没有记录,就使用默认产品表的价格,其他为null,
我想要输出的结果:如下:
001 0.3 张二 2017-9-08 wa
002 0.2 李四 2017-5-05 qa
003 0.3 null null waselect distinct B.model,min(B.price),B.who,B.date from A,B where A.model=B.model;
如果这样的话,003是不会被打印出来。select A.model,min(B.price),B.who,B.date from A,B group by A.model;
这样出来每一列的数据都是独立的,并不会关联上。比如最低的价格的记录的who,date都不是最低价格该记录的数据。请教大神们烦恼我很久,百度了很多也不知道怎么写,在下衷心感谢。
model def_price brand
001 0.5 wa
002 0.2 qa
003 0.3 waB来货表
model price who date
001 0.4 张三 2017-10-08
001 0.3 张二 2017-9-08
001 0.5 张三 2017-8-08
001 0.6 张三 2017-11-08
002 0.2 李四 2017-5-05
002 0.3 李五 2017-4-061:我想得到不重复的记录,并且这个记录是最新日期的。或是最低价格的记录。???
2:我想得到每条最低价格而不重复型号的数据,003来货表并没有记录,就使用默认产品表的价格,其他为null,
我想要输出的结果:如下:
001 0.3 张二 2017-9-08 wa
002 0.2 李四 2017-5-05 qa
003 0.3 null null waselect distinct B.model,min(B.price),B.who,B.date from A,B where A.model=B.model;
如果这样的话,003是不会被打印出来。select A.model,min(B.price),B.who,B.date from A,B group by A.model;
这样出来每一列的数据都是独立的,并不会关联上。比如最低的价格的记录的who,date都不是最低价格该记录的数据。请教大神们烦恼我很久,百度了很多也不知道怎么写,在下衷心感谢。
解决方案 »
- MySQL的一个简单问题,由于初学,所以不清楚了,麻烦大大们解答解答
- mysql 用命令显示表test所属哪个用户,怎么查?
- MYSQL数据库update问题
- 刚学mysql ,请高手看下这个存储过程,找了好久不知哪错了
- 如何判断一个表的某列已经建立?
- 数据库中记录国家省份城市信息,应该使用哪种表的设计方式。
- 如何将本机上的mysql完全移植到另一台机器上?在线等!
- 求my-sql语句,谢谢
- 如何在MYSQL中实现这条SQL
- 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
- 通过二进制log恢复误删的数据报错
- mysql server安装的问题,求教
所以这里有几个问题:
1. 价格最低SELECT model, MIN(price) as price FROM B来货表 GROUP BY model2. 价格最低要最新日期SELECT a.model, a.price, MAX(B.date) as date
FROM(
SELECT model, MIN(price) as price FROM B来货表 GROUP BY model
)a, B来货表 b
WHERE a.model = b.model
GROUP BY a.model, a.price3. 最低价格最新日期中,如果仍然有重复的,任意取一个SELECT aa.model, aa.price, aa.date, ANY_VALUE(bb.who) as who
FROM(
SELECT a.model, a.price, MAX(B.date) as date
FROM(
SELECT model, MIN(price) as price FROM B来货表 GROUP BY model
)a, B来货表 b
WHERE a.model = b.model
) aa, B来货表 bb
WHERE aa.model = bb.model
GROUP BY aa.model, aa.price, aa.date4. 这个是最终的查询, 实现需要的数据SELECT m.model,
IFNULL(data.price, m.def_price) as price,
data.who, data.date, m.brand
FROM(
SELECT aa.model, aa.price, aa.date, ANY_VALUE(bb.who) as who
FROM(
SELECT a.model, a.price, MAX(B.date) as date
FROM(
SELECT model, MIN(price) as price FROM B来货表 GROUP BY model
)a, B来货表 b
WHERE a.model = b.model
) aa, B来货表 bb
WHERE aa.model = bb.model
GROUP BY aa.model, aa.price, aa.date
)data RIGHT JOIN A产品表 m ON m.model = data.model
非常谢谢你兄弟,你的这4个解决方案还是没有办法把A 表003给打印出来:
第一个,不查询A表。
2/3/4 有where a.model = b.model, 那么A表里有003,B表里却没有003,没有办法把003给打出来,如何根据A表的model,去合并B表的各种条件呢?能有办法输出这样的结果吗?
001 0.3 张二 2017-9-08 wa
002 0.2 李四 2017-5-05 qa
003 0.3 null null wa谢谢
你说没出来的是 003 , 那就彻底无语了
RIGHT JOIN 是白用的么?
DROP TABLE IF EXISTS A产品表, B来货表;CREATE TABLE A产品表(
model varchar(10) primary key, def_price decimal(10,1), brand varchar(10) );
INSERT A产品表 VALUES
('001', 0.5, 'wa'),
('002', 0.2, 'qa'),
('003', 0.3, 'wa');CREATE TABLE B来货表(
model varchar(10), price decimal(10, 1), who varchar(10), date date);
INSERT B来货表 VALUES
('001', 0.4, '张三', '2017-10-08'),
('001', 0.3, '张二', '2017-9-08'),
('001', 0.5, '张三', '2017-8-08'),
('001', 0.6, '张三', '2017-11-08'),
('002', 0.2, '李四', '2017-5-05'),
('002', 0.3, '李五', '2017-4-06');SELECT m.model,
IFNULL(data.price, m.def_price) as price,
data.who, data.date, m.brand
FROM(
SELECT aa.model, aa.price, aa.date, ANY_VALUE(bb.who) as who
FROM(
SELECT a.model, a.price, MAX(B.date) as date
FROM(
SELECT model, MIN(price) as price FROM B来货表 GROUP BY model
)a, B来货表 b
WHERE a.model = b.model
GROUP BY a.model, a.price
) aa, B来货表 bb
WHERE aa.model = bb.model
GROUP BY aa.model, aa.price, aa.date
)data RIGHT JOIN A产品表 m ON m.model = data.model;自己执行看结果,如果还是没有出来,那也许你用的不是 myql, 或者是版本不是我用过的那种
b.model, MIN(b.price), b.who, MAX(b.date), a.brand
FROM
a_get_product b
LEFT JOIN
a_product a ON a.model = b.model
GROUP BY a.model
UNION ALL SELECT
a.model, a.def_price, NULL who, NULL date, a.brand
FROM
a_product a
WHERE
NOT EXISTS( SELECT
*
FROM
a_get_product b
WHERE
b.model = a.model);
a_get_product:来货表;a_product:产品表。