我有一个表“stocks_prices”,其中包含条目gvkey,iid,datecol和prccd。它代表datecol(YYYY-MM-DD)上股票的价格(prccd)(由其gvkey和iid表示)。我想查看我的所有数据,并在同一行中查看当月第一天的价格,并在其旁边显示datecol上的价格 - 35天(即35天前它的价格是多少),但它需要是一周工作日(周末没有参赛作品)。
现在我有了:
@echo off&setlocal enabledelayedexpansion
set "musicroot=D:\files"
set "playfolder=F:\dump"
set /a filecount=351
pushd "%musicroot%"
for /r %%i in (*.mp3) do set /a files+=1& set "$!files!=%%~i"
popd
pushd "%playfolder%"
:randomloop
set /a rd=%random%%%files+1
set "mp3=!$%rd%!"
if not defined mp3 goto :randomloop
set "$%rd%="
for %%i in ("%mp3%") do if exist "%%~nxi" echo "%%~nxi" already exist in %playfolder%.& goto:randomloop
copy "%mp3%"
set /a filecount-=1
if %filecount% gtr 0 goto:randomloop
popd
它有效,但不完全是我想要的方式(它看起来正好35天后,我希望它可以使用最接近的日期)。我希望这不是一个微不足道的问题,我只是开始使用MySQL。
提前谢谢。
答案 0 :(得分:2)
您可以使用WEEKDAY
功能获取月初最接近的工作日:
以下是实施:
SELECT
CASE WEEKDAY(datecol)
WHEN 5 THEN DATE_ADD(datecol, INTERVAL 2 DAY) -- Sat Mon
WHEN 6 THEN DATE_ADD(datecol, INTERVAL 1 DAY) -- Sun Mon
ELSE datecol
END AS first_weekday
FROM stocks_prices
-35天正好是5周前。因此,当前datecol
的工作日与5周前相同。这是结果:
SELECT
b1.gvkey,
b1.iid,
b1.datecol,
b1.prccd,
b2.datecol as '35days',
(b2.prccd - b1.prccd)/b1.prccd
FROM stocks_prices b1
LEFT JOIN stocks_prices b2
ON b1.datecol = DATE_ADD(b2.datecol, INTERVAL 35 DAY)
AND b1.gvkey = b2.gvkey
AND b1.iid = b2.iid
WHERE b1.datecol IN
(
SELECT
CASE(WEEKDAY(datecol))
WHEN 5 THEN DATE_ADD(datecol, INTERVAL 2 DAY) -- Sat -> Mon
WHEN 6 THEN DATE_ADD(datecol, INTERVAL 1 DAY) -- Sun -> Mon
ELSE datecol
END
FROM stocks_prices
WHERE DAY(datecol) = 1
)