吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1248|回复: 10
收起左侧

[求助] 小白求SQL语句编写。

[复制链接]
speed1995 发表于 2021-7-14 08:33
本帖最后由 speed1995 于 2021-7-14 10:33 编辑

微信截图_20210714083708.png
如图所示如何写SQL SERVER语句。
微信截图_20210714080820.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| speed1995 发表于 2021-7-14 08:39
8、9、10为商品C写错了
灿烂的小居 发表于 2021-7-14 10:03
本帖最后由 灿烂的小居 于 2021-7-14 10:04 编辑

[SQL] 纯文本查看 复制代码
SELECT * FROM table
ORDER BY date Desc , Fname

你可以试试看
origamiii 发表于 2021-7-14 10:14
极品黑车 发表于 2021-7-14 10:26
本帖最后由 极品黑车 于 2021-7-14 10:29 编辑

[SQL] 纯文本查看 复制代码
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
[mw_shl_code=sql,true]
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' 附近有语法错误。
> [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]关键字 'from' 附近有语法错误。 (156)
我再研究研究
 楼主| speed1995 发表于 2021-7-16 10:32

SELECT
from (SELECT  
from (SELECT from table  WHERE fname='厂家A') a where not exists (SELECT from (SELECT from table  WHERE 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 table  WHERE fname='厂家A') a where not exists (SELECT from (SELECT from table  WHERE 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
[SQL] 纯文本查看 复制代码
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
[SQL] 纯文本查看 复制代码
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`
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表