首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据最近的录入日期从不同的行中选择值?

如何根据最近的录入日期从不同的行中选择值?
EN

Stack Overflow用户
提问于 2010-04-20 18:41:43
回答 2查看 193关注 0票数 0

基本上,我有一个表,用来保存员工工作服的详细信息。它由柱子组成:

代码语言:javascript
复制
EmployeeID, CostCentre, AssociateLevel, IssueDate, TrouserSize, TrouserLength, TopSize & ShoeSize. 

一名员工可以同时分配一条裤子、一件上衣和一双鞋,或者只分配一件或两件衣服。众所周知,人的规模和员工水平可能会发生变化,这就是为什么我真的需要帮助的原因。不同类型的员工(协会级别)需要不同颜色的衣服,但你可以忽略这一部分。每当员工收到一件衣服时,就会在表格中插入一个新的行,并输入日期。我需要能够为每个员工选择每件衣服的最新的衣服尺码。

没有必要让所有列都保持值,因为员工可能会在一年中的不同时间收到裤子或PoloT恤。

例如,如果员工'54664LSS‘在2011年3月24日得到了一条'XL’裤子和一件'L‘上衣,但随后在2010年5月26日得到了一件'M’上衣。这些项目的输入在两个不同的行上显然是有帮助的。因此,如果我想为每个服装类别选择最新的服装。然后需要返回'M‘尺码的上衣和'L’尺码的裤子的值。

任何帮助都是非常感谢的,因为我被困住了:(。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 15:31:34

如果您能给出模式定义和一些样本数据,以及预期的输出,而不是注释,那么回答起来总是更容易一些。我已经尝试了一个模式定义,还没有得到任何示例数据,并且认为这个答案满足了您的需求:

代码语言:javascript
复制
/*create table Clothing (
 EmployeeID int not null,
 CostCentre varchar(10) not null,
 AssociateLevel int not null,
 IssueDate datetime not null,
 TrouserSize int null,
 TrouserLength int null,
 TopSize varchar(4) null,
 ShoeSize varchar(10) null
)*/
go
with Trousers as (
 select
  EmployeeID,
  CostCentre,
  AssociateLevel,
  IssueDate,
  TrouserSize,
  TrouserLength,
  RANK() OVER (PARTITION BY EmployeeID ORDER BY IssueDate Desc) as RowNum
 from
  Clothing
 where
  TrouserSize is not null
), Tops as (
 select
  EmployeeID,
  CostCentre,
  AssociateLevel,
  IssueDate,
  TopSize,
  RANK() OVER (PARTITION BY EmployeeID ORDER BY IssueDate Desc) as RowNum
 from
  Clothing
 where
  TopSize is not null
), Shoes as (
 select
  EmployeeID,
  CostCentre,
  AssociateLevel,
  IssueDate,
  ShoeSize,
  RANK() OVER (PARTITION BY EmployeeID ORDER BY IssueDate Desc) as RowNum
 from
  Clothing
 where
  ShoeSize is not null
)
select
  COALESCE(tr.EmployeeID,tops.EmployeeID,sh.EmployeeID) as EmployeeID,
  tr.CostCentre,
  tr.AssociateLevel,
  tr.IssueDate,
  tr.TrouserSize,
  tr.TrouserLength,
  tops.CostCentre,
  tops.AssociateLevel,
  tops.IssueDate,
  tops.TopSize,
  sh.CostCentre,
  sh.AssociateLevel,
  sh.IssueDate,
  sh.ShoeSize
from
 Trousers tr
  full outer join
 Tops
  on
   tr.EmployeeID = Tops.EmployeeID
  full outer join
 Shoes sh
  on
   tr.EmployeeID = sh.EmployeeID and
   Tops.EmployeeID = sh.EmployeeID
where
 (tr.RowNum is null or tr.RowNUm = 1) and
 (Tops.RowNum is null or Tops.RowNUm = 1) and
 (sh.RowNum is null or sh.RowNum = 1)
票数 0
EN

Stack Overflow用户

发布于 2010-04-20 18:46:15

代码语言:javascript
复制
SELECT TOP 1
  TrouserSize, AssociateLevel
FROM 
  Employee
WHERE
  EmployeeID = '54664LSS' AND
  TrouserSize IS NOT NULL
ORDER BY 
  IssueDate DESC

SELECT TOP 1
  TopSize, AssociateLevel
FROM 
  Employee
WHERE
  EmployeeID = '54664LSS' AND
  TopSize IS NOT NULL
ORDER BY 
  IssueDate DESC

(抱歉,我编辑了这个sql大约6次,直到我想出了我认为的答案)

假设-只有一个问题日期列。您可以在发布日期发布多个项目,但您不需要一起查看这些结果(否则我们将不得不对联合结果进行分组)。如果没有发布任何项目,则在该列中放置一个null。

如果AssociateLevel在服装问题之间发生变化,我不确定您的逻辑是什么

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2674352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档