speed1995 发表于 2021-7-14 08:33

小白求SQL语句编写。

本帖最后由 speed1995 于 2021-7-14 10:33 编辑


如图所示如何写SQL SERVER语句。

speed1995 发表于 2021-7-14 08:39

8、9、10为商品C写错了

灿烂的小居 发表于 2021-7-14 10:03

本帖最后由 灿烂的小居 于 2021-7-14 10:04 编辑

SELECT * FROM table
ORDER BY date Desc , Fname
你可以试试看

origamiii 发表于 2021-7-14 10:14

我语文不太好,没看懂你条件的意思{:301_1004:}{:301_1004:}

极品黑车 发表于 2021-7-14 10:26

本帖最后由 极品黑车 于 2021-7-14 10:29 编辑


select * from TABLE where Fnumber + '$' + (case Fname when '厂家1' then '9' else '' end + convert(varchar(10),date,120))
in (select Fnumber + '$' + max(case Fname when '厂家1' then '9' else '' end + convert(varchar(10),date,120) from TABLE group by Fnumber)

你列名用date出于减少歧义的角度总归不太合适吧

speed1995 发表于 2021-7-14 10:46

origamiii 发表于 2021-7-14 10:14
我语文不太好,没看懂你条件的意思

是我表达得不好而已。就是ABC三个厂家。如果同一商品出现有A厂家的情况下,先选A厂家,日期选最新日期的。如果商品没有A厂家的情况下就选最新日期的。

speed1995 发表于 2021-7-14 11:09

极品黑车 发表于 2021-7-14 10:26

select * from TABLE where Fnumber + '$' + (case Fname when '厂家1' then '9'...

嗯。小白一个,date用于列名是不适当后改为REGdate。用你的代码我这边也出现错误。
SELECT * FROM TABLE where Fnumber + '$' + (case Fname when '厂家A' then '9' else '' end + convert(varchar(10),regdate,120))
in (select Fnumber + '$' + max(case Fname when '厂家A' then '9' else '' end + convert(varchar(10),regdate,120) from TABLE group by Fnumber)
> Msg 156, Level 15, State 1, Server TEST, Procedure , Line 0
关键字 'from' 附近有语法错误。
> 关键字 'from' 附近有语法错误。 (156)
我再研究研究{:1_893:}

speed1995 发表于 2021-7-16 10:32

SELECT *
from (SELECT* from (SELECT * from tableWHERE fname='厂家A') a where not exists (SELECT * from (SELECT * from tableWHERE fname='厂家A') b where a.fnumber = b.fnumber and b.regdate>a.regdate)) T1
UNION
SELECT *
from (SELECT b.fnumber,b.fmodel,b.fprice,b.regdate,b.Fname from (SELECT fnumber from (SELECT* from table a where not exists (SELECT * from table b where a.fnumber = b.fnumber and b.regdate>a.regdate)) T2
except
SELECT fnumber from (SELECT* from (SELECT * from tableWHERE fname='厂家A') a where not exists (SELECT * from (SELECT * from tableWHERE fname='厂家A') b where a.fnumber = b.fnumber and b.regdate>a.regdate)) T3 ) a LEFT JOIN table_3 b on a.fnumber=b.fnumber) T4
因为还不太懂语句的书写。自己写出来的想法是这样的。先取商品为厂家A的最新时间为T1,再取所有商品的最新时间的厂家为T2,用表的减法用T2的商品减去T1里的商品得出除去厂家A外的其它厂家最新时间的商品为T3表,然后左连接回T2表得出完整表T4,再用T1表加T4表得出最后结果。各位大神有什么好方法求简化。我自己看都看到眼花。

极品黑车 发表于 2021-7-29 20:36

speed1995 发表于 2021-7-14 11:09
嗯。小白一个,date用于列名是不适当后改为REGdate。用你的代码我这边也出现错误。
SELECT * FROM TABLE ...

最后一个FROM前面加上后半个括号)

lianyi 发表于 2021-7-30 09:39

本帖最后由 lianyi 于 2021-7-30 12:46 编辑

根据你的要求,可以试试用ROW_NUMBER PARTITION BY来排列和筛选数据,由于没有sqlserver环境,只有mysql环境,所以只给出mysql的语句,sqlserver的大同小异

ROW_NUMBER
SELECT *
FROM (
        SELECT *, ROW_NUMBER() over(PARTITION BY `Fnumber` ORDER BY IF(`Fname` = '厂家A', 0, 1) ASC, `date` DESC) AS `num`
        FROM `table`
) AS t
WHERE t.`num` = 1

GROUP_CONCAT
SELECT `Fnumber`, SUBSTRING_INDEX(GROUP_CONCAT(`Fprice` ORDER BY IF(`Fname` = '厂家A', 0, 1) ASC, `date` DESC), ',', 1) AS `Fprice`
FROM `table`
GROUP BY `Fnumber`
页: [1] 2
查看完整版本: 小白求SQL语句编写。