编写 SQL Server 查询

Posted

技术标签:

【中文标题】编写 SQL Server 查询【英文标题】:Write SQL Server query 【发布时间】:2016-08-24 01:00:25 【问题描述】:

请帮我查询:

select * 
from sc84 as nom
join sc319 as p on p.PARENTEXT = nom.id
join sc219 as pt on p.sp327 = pt.id
join _1SCONST as c on c.objid=p.id

结果大概是这样的表

Car / price_base / 08-08-2016:13-40 / 100 /   
Car / price_base / 08-08-2016:14-40 / 150 /    
Car / price_base / 08-09-2016:13-40 / 190 /    
Car / price_super / 08-09-2016:18-40 / 210 /   
Car / price_super / 08-10-2016:13-40 / 290 /      

想要回来

Car / price_base / 08-09-2016:13-40 / 190 / 
Car / price_super / 08-10-2016:13-40 / 290 /

很好,日期的价格类型及其价值。请提示如何获得最后一个(每种价格和每种商品的当前价格)尝试与组的选项,但显然没有足够的技巧。

nom.id - PK SKU     
pt.id - PK price type   
p.id -PK price    
p.parentext - parent price (sku)    
p.sp327 - FK to price type   
date = date column   

我使用的是 SQL Server 2008。

表结构

T=1SCONST |

----Columns-------
Name                  |Descr               |Type|Length|Precision
F=ROW_ID                |Row ID              |I   |0     |0        
F=OBJID                 |ID obj(0-cons )     |C   |9     |0        
F=ID                    |ID parameter        |I   |0     |0        
F=DATE                  |Fix date            |D   |0     |0        
F=VALUE                 |valume              |V   |255   |0        
F=DOCID                 |ID Document         |C   |9     |0        
F=TIME                  |Time                |I   |0     |0        
F=ACTNO                 |Action No           |I   |0     |0        
F=LINENO_               |LineNo              |S   |0     |0        
F=TVALUE                |                    |C   |3     |0      

T=SC319   |

----Columns-------
Name                  |Descr               |Type|Length|Precision
F=ROW_ID                |Row ID              |I   |0     |0        
F=ID                    |ID object           |C   |9     |0        
F=PARENTEXT             |Parent in other tabl|C   |9     |0        
F=ISMARK                |Object is Marked for|L   |0     |0        
F=VERSTAMP              |Version stamp       |I   |0     |0        
F=SP6681                |(P)Âàëþòà           |C   |9     |0        
F=SP6682                |(P)Ïðîöåíò          |N   |5     |2        
F=SP327                 |(P)ÒèïÖåí           |C   |9     |0      

T=SC319   |Ñïðàâî÷íèê Öåíû               |SC319      |R         

# ----Columns-------
# Name                  |Descr               |Type|Length|Precision
F=ROW_ID                |Row ID              |I   |0     |0        
F=ID                    |ID object           |C   |9     |0        
F=PARENTEXT             |Parent in other tabl|C   |9     |0        
F=ISMARK                |Object is Marked for|L   |0     |0        
F=VERSTAMP              |Version stamp       |I   |0     |0        
F=SP6681                |(P)Âàëþòà           |C   |9     |0        
F=SP6682                |(P)Ïðîöåíò          |N   |5     |2        
F=SP327                 |(P)ÒèïÖåí           |C   |9     |0        

#==TABLE no 24     : Ñïðàâî÷íèê Íîìåíêëàòóðà
# Name    |Descr                         |SQLTableNam|RecordLock
T=SC84    |Ñïðàâî÷íèê Íîìåíêëàòóðà       |SC84       |R         

# ----Columns-------
# Name                  |Descr               |Type|Length|Precision
F=ROW_ID                |Row ID              |I   |0     |0        
F=ID                    |ID object           |C   |9     |0        
F=PARENTID              |ID parent obj       |C   |9     |0        
F=CODE                  |object code         |C   |8     |0        
F=DESCR                 |object description  |C   |70    |0        
F=ISFOLDER              |Is Line - Folder    |Y   |0     |0        
F=ISMARK                |Object is Marked for|L   |0     |0        
F=VERSTAMP              |Version stamp       |I   |0     |0        
F=SP85                  |(P)Àðòèêóë          |C   |25    |0        
F=SP86                  |(P)ÁàçîâàÿÅäèíèöà   |C   |9     |0        
F=SP208                 |(P)Âåñîâîé          |N   |1     |0        
F=SP2417                |(P)ÂèäÍîìåíêëàòóðû  |C   |9     |0        
F=SP97                  |(P)ÌèíÎñòàòîê       |N   |13    |3        
F=SP5066                |(P)ÍåÂêëþ÷àòüÂïðàéñ |N   |1     |0        
F=SP5013                |(P)ÍîìåðÃÒÄ         |C   |9     |0        
F=SP94                  |(P)ÎñíîâíàÿÅäèíèöà  |C   |9     |0        
F=SP4427                |(P)ÎñíîâíîåÑâîéñòâî |C   |9     |0        
F=SP103                 |(P)ÑòàâêàÍÄÑ        |C   |9     |0        
F=SP104                 |(P)ÑòàâêàÍÏ         |C   |9     |0        
F=SP5012                |(P)ÑòðàíàÏðîèñõîæäåí|C   |9     |0        
F=SP8574                |(P)ÍèçÎòêëîíåíèÿÑåáå|N   |4     |2        
F=SP8575                |(P)ÂåðõÎòêëîíåíèÿÑåá|N   |4     |2        
F=SP8576                |(P)ÍèçÎòêëîíåíèÿÑïåö|N   |4     |2        
F=SP8577                |(P)ÂåðõÎòêëîíåíèÿÑïå|N   |4     |2        
F=SP8578                |(P)ÍèçÎòêëîíåíèÿÇàêó|N   |4     |2        
F=SP8579                |(P)ÂåðõÎòêëîíåíèÿÇàê|N   |4     |2        
F=SP8580                |(P)ÍèçÎòêëîíåíèÿÐîçí|N   |4     |2        
F=SP8581                |(P)ÂåðõÎòêëîíåíèÿÐîç|N   |4     |2        
F=SP8599                |(P)Äëèíà            |N   |6     |2        
F=SP8600                |(P)Øèðèíà           |N   |6     |2        
F=SP8601                |(P)Âûñîòà           |N   |6     |2        
F=SP8602                |(P)Îáúåì            |N   |14    |5        
F=SP8606                |(P)ÌàêñèìàëüíûéÏðîöå|N   |4     |2        
F=SP8607                |(P)Àäðåñ            |C   |9     |0        
F=SP95                  |(P)Êîììåíòàðèé      |M   |0     |0        
F=SP101                 |(P)ÏîëíÍàèìåíîâàíèå |M   |0     |0   

【问题讨论】:

请提供表和列结构。另外,您使用的是 sql-server-2005 还是 sql-server-2008? 我认为您已经发布了查询当前显示的内容。现在发布您想要返回的内容 我要退货:汽车 / price_base / 08-09-2016:13-40 / 190 / 和汽车 / price_super / 08-10-2016:13-40 / 290 / 我将为您编辑问题并添加该信息 这是一个如何做你想做的事的例子:***.com/questions/6201253/…。如果您愿意,我可以为您调整它,但您需要在示例数据中给我一些列名。请编辑问题并将列名添加到您的示例数据中。如果你这样做,我会回来回答。 【参考方案1】:
select * from (
   select *, ROW_NUMBER() over(partition by nom.id,pt.id order by c.date desc) NUM
     from sc84 as nom   
     join sc319 as p   
       on p.PARENTEXT = nom.id   
     join sc219 as pt   
       on p.sp327 = pt.id  
     join _1SCONST as c  
       on c.objid=p.id
  ) A
  where NUM=1

【讨论】:

以上是关于编写 SQL Server 查询的主要内容,如果未能解决你的问题,请参考以下文章

什么是“查询编写器,SQL Server Management Studio Express 中的新查询”

进行查找并编写查询以从 sql server 获取数据

如何编写此查询以在 Sql Server 中获得更好的性能?删除子字符串行

使用多个 UNION 重写 SQL Server 查询

如何编写查询以获取 SQL Server 中每个组的第一个条目? [复制]

如何在 sql server 2008 中编写对行到列的查询?