Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

求助一个查询

子煜  发表于:2013-07-08 15:08:25  
复制

型号+厚度为唯一值,视为一个产品,一个产品会经常报价,如何利用查询,将旧的记录标记“旧”,最新的一个报价为“新”。这个怎么判断?

 


 

型号 厚度 生效日期 单价 新旧报价
EC .6 2013/6/10 1.36
EC .6 2013/6/18 1.35
EC .6 2013/6/20 1.38

 

 db1

 

Top
西出阳关无故人 发表于:2013-07-08 17:16:43

做一个自定义函数:

Function 标记新旧(ByVal 当前型号 As String, ByVal 当前厚度 As Double, ByVal 当前日期 As Date) As String
    Dim a As String
    Dim newdate As Date
    newdate = DMax("生效日期", "报价", "型号='" & 当前型号 & "' and 厚度=" & 当前厚度)
    If newdate > 当前日期 Then
        a = "旧"
    Else
        a = "新"
    End If
    标记新旧 = a
End Function

然后查询的SQL:

SELECT 报价.型号, 报价.厚度, 报价.生效日期, 报价.单价, 标记新旧([型号],[厚度],[生效日期]) AS 新旧报价 FROM 报价;

 



西出阳关无故人 发表于:2013-07-08 17:32:10

也可以直接做查询:

SELECT 报价.型号, 报价.厚度, 报价.生效日期, 报价.单价, IIf(DMax("生效日期","报价","型号='" & [型号] & "' AND 厚度=" & [厚度])>[生效日期],"旧","新") AS 新旧报价
FROM 报价;

 



煮江品茶 发表于:2013-07-08 17:32:18

在价格录入的顺序与时间顺序一致时,可写为:

select *,Dlast("单价","tbname","型号='" & [型号] & "' and 厚度='" & [厚度] & "'")=[单价] as 新价 from tbname

 

 



子煜 发表于:2013-07-09 09:21:04

因为我在SQL里面,请问在SQL里,以下这个怎么写?

SELECT 报价.型号, 报价.厚度, 报价.生效日期, 报价.单价, IIf(DMax("生效日期","报价","型号='" & [型号] & "' AND 厚度=" & [厚度])>[生效日期],"旧","新") AS 新旧报价
FROM 报价;

 



子煜 发表于:2013-07-09 10:58:57

或者,以下的自定义函数能转到SQL里的自定义函数吗?

Function 标记新旧(ByVal 当前型号 As String, ByVal 当前厚度 As Double, ByVal 当前日期 As Date) As String
Dim a As String
Dim newdate As Date
newdate = DMax("生效日期", "报价", "型号='" & 当前型号 & "' and 厚度=" & 当前厚度)
If newdate > 当前日期 Then
a = "旧"
Else
a = "新"
End If
标记新旧 = a
End Function

然后查询的SQL:

SELECT 报价.型号, 报价.厚度, 报价.生效日期, 报价.单价, 标记新旧([型号],[厚度],[生效日期]) AS 新旧报价 FROM 报价;

 



paciwater 发表于:2013-07-18 23:23:21

建议在表中新增1列   “新旧报价” , 默认值设为“新”

1、新录入的数据,“新旧报价”值为“新”

2、新增如下的更新查询,新录入数据后,执行该查询,将其他数据标记为“旧”

代码:

UPDATE 报价 a SET a.新旧报价 = '旧' 
   WHERE a.新旧报价 = '新' 
   AND EXISTS (SELECT 1 FROM 
                (SELECT b.型号&b.厚度 AS AA,MAX(b.生效日期) AS BB FROM 报价 b GROUP BY b.型号 & b.厚度) c 
               WHERE a.型号&a.厚度=c.AA AND a.生效日期 < c.BB
               )



总记录:6篇  页次:1/1 9 1 :