我需要将周末插入只有工作日的表中,然后将最后一个已知值分配给周末值。我知道我将需要一个插入查询,尽管在VBA和SQL方面我还是很新。
到目前为止的代码:
Private Sub btnWeekends_Click()
DoCmd.SetWarnings False
Dim db as DataBase
Dim rs as RecordSet
Dim fieldCount as Integer
Dim i as Integer
set db = CurrentDb
set rs = db.OpenRecordSet("Archive", dbOpenDynaset)
fieldCount = db.TableDefs("Archive").Fields.Count
Dim DateVal As Date
DateVal = rs![ValDate]
Do While Not rs.EOF
i = 0
Do While IsNull(DLookup("ValDate", "Archive", "ValDate=#" & DateAdd("d", 1, ValDate) & "#")) = True
rs.AddNew
' removed other fields and edited line below
rs![ValDate] = DateVal
rs.Update
i = i + 1
Loop
rs.MoveNext
Loop
'//-----Clean Up
set db = Nothing
set rs = Nothing
DoCmd.SetWarnings True
End Sub
我拥有的数据(从周五开始):
+------------------------------------------------------------------------+
|ID |Customer Name| Nbr | City |Value of Day|ExtendedNbr| ValDate |
+------------------------------------------------------------------------+
|001| Cust1 | 91 | New York | 529 | 91928592 | 1/5/2018 |
|002| Cust2 | 87 | Las Vegas| 654 | 85642187 | 1/5/2018 |
|003| Cust3 | 45 | Denver | 258 | 78943245 | 1/5/2018 |
|004| Cust1 | 91 | New York | 611 | 91928592 | 1/8/2018 |
|005| Cust2 | 87 | Las Vegas| 753 | 85642187 | 1/8/2018 |
|006| Cust3 | 45 | Denver | 357 | 78943245 | 1/8/2018 |
+------------------------------------------------------------------------+
'ValDate then skips past 1/6/2018 and 1/7/2018 to 1/8/2018
我需要的数据:
+------------------------------------------------------------------------+
|ID |Customer Name| Nbr | City |Value of Day|ExtendedNbr| ValDate |
+------------------------------------------------------------------------+
|001| Cust1 | 91 | New York | 529 | 91928592 | 1/5/2018 |
|002| Cust2 | 87 | Las Vegas| 654 | 85642187 | 1/5/2018 |
|003| Cust3 | 45 | Denver | 258 | 78943245 | 1/5/2018 |
|004| Cust1 | 91 | New York | 529 | 91928592 | 1/6/2018 |
|005| Cust2 | 87 | Las Vegas| 654 | 85642187 | 1/6/2018 |
|006| Cust3 | 45 | Denver | 258 | 78943245 | 1/6/2018 |
|007| Cust1 | 91 | New York | 529 | 91928592 | 1/7/2018 |
|008| Cust2 | 87 | Las Vegas| 654 | 85642187 | 1/7/2018 |
|009| Cust3 | 45 | Denver | 258 | 78943245 | 1/7/2018 |
|010| Cust1 | 91 | New York | 611 | 91928592 | 1/8/2018 |
|011| Cust2 | 87 | Las Vegas| 753 | 85642187 | 1/8/2018 |
|012| Cust3 | 45 | Denver | 357 | 78943245 | 1/8/2018 |
+------------------------------------------------------------------------+
'I'm needing it to add the Saturday(1/6/2018) and Sunday(1/7/2018) before continuing on to 1/8/2018
因为没有Value of Day
对1/6/2018
或者1/7/2018
,我需要抢前一天的值,并将其输入到新添加的周末日期(例如,2018年1月6日和2018年1月7日)与匹配的信息,以及(Customer Name
,Nbr
,City
,ExtendedNbr
)。
在此先感谢您提供的任何帮助/建议。我仍然很新,任何学习更多的机会都将不胜感激!
编辑1:
rs.Update
带有“运行时错误‘3022’的行错误:对表的请求更改未成功,因为它们会在索引,主键或关系中创建重复的值…”
编辑2:
结果在所有记录的末尾输入。由于某种原因,循环是无限的。新日期未正确插入表格中(它们都是相同的日期,并且顺序不正确)。
这是一个基于SQL的解决方案。
这将获得所有记录,其中客户x存在星期五+下星期一的记录,但不包括星期六的记录。
SELECT a1.*
FROM Archive a1
INNER JOIN Archive a2 ON (
(a1.Nbr = a2.Nbr)
AND (a1.ExtendedNbr = a2.ExtendedNbr)
AND (a1.ValDate + 3 = a2.ValDate)
AND (DatePart("w", a1.ValDate) = 6)
)
WHERE NOT EXISTS
(SELECT * FROM Archive a3
WHERE a3.Nbr = a1.Nbr
AND a3.ValDate = a1.ValDate + 1)
您可以使用它来插入星期六:
INSERT INTO Archive ([Customer Name], Nbr, City, [Value of Day], ExtendedNbr, ValDate)
SELECT a1.[Customer Name], a1.Nbr, a1.City, a1.[Value of Day], a1.ExtendedNbr, a1.ValDate + 1
FROM Archive a1
INNER JOIN Archive a2 ON (
(a1.Nbr = a2.Nbr)
AND (a1.ExtendedNbr = a2.ExtendedNbr)
AND (a1.ValDate + 3 = a2.ValDate)
AND (DatePart("w", a1.ValDate) = 6)
)
WHERE NOT EXISTS
(SELECT * FROM Archive a3
WHERE a3.Nbr = a1.Nbr
AND a3.ValDate = a1.ValDate + 1)
要插入周日,使用相同的,但取代+ 1
通过+ 2
在这两个地方。
要插入随机的单个失踪日(银行假期),请更改a1.ValDate + 3
为a1.ValDate + 2
,然后删除AND (DatePart("w", a1.ValDate) = 6)
编辑
如果DatePart()
在JOIN内遇到麻烦,则为备用版本:
INSERT INTO Archive ([Customer Name], Nbr, City, [Value of Day], ExtendedNbr, ValDate)
SELECT a1.[Customer Name], a1.Nbr, a1.City, a1.[Value of Day], a1.ExtendedNbr, a1.ValDate + 1
FROM Archive a1
INNER JOIN Archive a2 ON (
(a1.Nbr = a2.Nbr)
AND (a1.ExtendedNbr = a2.ExtendedNbr)
AND (a1.ValDate + 3 = a2.ValDate)
)
WHERE NOT EXISTS
(SELECT * FROM Archive a3
WHERE a3.Nbr = a1.Nbr
AND a3.ValDate = a1.ValDate + 1)
AND (DatePart("w", a1.ValDate) = 6)
问题内容: 我想将一些数据插入与下一年的日期相关的表中。我实际上只需要插入工作日。 我可以通过回退并删除周末的行来解决我的问题,但这似乎不太优雅-有人能想到一种方法来修改我的循环以便跳过周末吗? 问题答案: 您总是可以在插入行之前检查星期几(星期几的名称取决于您的NLS设置,因此这不是最可靠的解决方案)
问题内容: 我的数据库中有一个date_created字段: 有什么办法可以按周末/工作日筛选date_created?我知道python的date.weekday()根据星期几返回0-6,所以我想使用类似以下内容: 问题答案: Django附带了一个工作日字段查询。 http://docs.djangoproject.com/en/dev/ref/models/querysets/#week-d
问题内容: 我以前曾发布过有关此内容的文章,这有助于我获得以下SQL: 这给了我以下结果: 我在尝试实现以下格式时遇到了一些麻烦: 任何人都可以提供帮助吗?我将不胜感激… 问题答案: SELECT fname, MONTH(eventDate), SUM(IF(WEEKDAY(eventDate) < 5,1,0)) AS WeekdayCount, SUM(IF(WEEKDAY(eventDat
问题内容: 如何获得两个工作日之间的工作天数,即不包括周末和节假日?假期是指法律认可的假期。由于每个国家/地区的假期不同,因此必须取决于国家/地区。 例如,由于介于两者之间的周末,应返回而不是。 我已经看过Jollyday和ObjectLab- Kit ,但是我不能让它们满足我的需要。我的意思是,他们两个都有很多有趣的方法,但是找不到类似…的东西。 问题答案: 最后是基于API 的解决方案: 致电
问题内容: 请在以下建议我。如何在Python中查找特定的一天是工作日还是周末? 问题答案: import datetime
问题内容: 我想计算用户输入的总日差 例如,当用户输入 和 现在,我正在使用此代码查找差异 总计的结果为6。但是问题是我不想包括周末(星期六和星期日)的日子 所以结果将是4 -—更新- 我有一个包含日期的表,该表的名称是假期 例如表格包含 因此,总天数为3,因为它没有计算假期日期 我该如何将输入中的日期等同于表中的日期? 问题答案: 很容易与我的最爱,和